ループの外で記事IDを参照する方法 WordPress
WordPressでオリジナルのテーマをガシガシ作りこんでいると、
ループの外で自分の記事IDを参照したい
というケースがたまにあります。
僕が今までに経験した具体的な例としては、以下とおりです。
- sidebar.phpに、特定の記事のときだけ広告バナーを表示させたい
- footer.phpに、特定の記事の時だけ関連記事のリンク一覧を表示させたい
- header.phpに、特定の記事の時だけ広告バナーを表示させたい
- function.phpに、特定の記事の時だけ実行する関数を実装したい
記事IDを取得するには、
the_ID();
を使えばいいのですが、この関数はループ内でしか使えず、おまけにecho付きなので、ブラウザへの表示までしてしまうため、上記のような場合にif文を使って分岐させたい場合は使えません。
そこで、ループ外で変数としてIDを参照できないかと調べたら、やはりありました。
何度も調べそうだったので、備忘録を兼ねて紹介したいと思います。
ループ外で記事IDを参照する関数
WordPressで用意されている記事IDを参照する関数は、
get_the_ID();
を使えばOKです。
僕がテストとして使っているWordPressのサイトにサンプルページを作っていますので、合わせて参考にしてください。
http://penguinweb.net/213.html
このテストページでは、記事ID:213のときのみsidebar.phpに「MISLEAD」へのリンクが表示されるようにしています。
ただ、この「get_th_ID()」ですがWordPressの関数リファレンスのページを見ると、
get_the_ID()はループの中でのみ使用することができます
という記載がありますが、ループの外でも使えます。
(使っても問題ありません)
気になったので、その理由を説明していきます。
get_the_ID()の中身
この関数は「wp-includes/post-template.php」に記述されており、その中身は以下のとおりです。
/** * Retrieve the ID of the current item in the WordPress Loop. * * @since 2.1.0 * @uses $post * * @return int */ function get_the_ID() { global $post; return $post->ID; }
ご覧のとおり、グローバル変数$postの中のIDを参照しているだけなのです。
そのため、実は
$post->ID;
と記述しても記事IDを参照できます。
さらに、$postに入っているものはこれだけではありません。
以下のソースを記述して中身を表示させると、
以下の情報が参照できます。
WP_Post Object ( [ID] => 投稿ID [post_author] => 投稿者ID [post_date] => 投稿日時 [post_date_gmt] => 投稿日時(GMT) [post_content] => 記事の内容 [post_title] => 記事のタイトル [post_excerpt] => 投稿内容(抜粋) [post_status] => 記事の公開状態 [comment_status] => 記事のコメント受付状態 [ping_status] => 記事のトラックバック/ピンバック受付状態 [post_password] => 記事の閲覧パスワード [post_name] => 記事のスラッグ [to_ping] => ピン通知 URL [pinged] => ピン通知済み URL [post_modified] => 記事の更新日時 [post_modified_gmt] => 記事の更新日時(GMT) [post_content_filtered] => [post_parent] => 親ID(親がなければ0) [guid] => 投稿のURL [menu_order] => 固定ページの表示順序(なければ0) [post_type] => 投稿タイプ (postなのか、pageなのか、attachmentなのか) [post_mime_type] => 添付ファイル(attachment)のとき MIME タイプ(imageやpngなど) [comment_count] => コメントの数 [filter] => フィルター名 )
いろいろな値が取得できるので、カスタマイズの幅を広がるかと思います。
WordPressのテーマ改修やオリジナルテーマ作成の際には、お世話になることも多いと思います。
みなさま素敵なWordPressライフを!
おまけ
ループの外で、自ページのカテゴリーを表示させたい場合は、上記の記事IDを利用することで取得できます。
ソースは以下のとおりです。
<?PHP $post_id = get_the_id(); echo get_the_category($post_id); ?>
これを利用すると、特定のカテゴリのページのみに広告バナーを出したりすることができます。
コメント一覧
コメントはありません