ループの外で記事IDを参照する方法 WordPress

公開:2016-03-14 / WordPress 制作・開発 / , , ,
更新:2017-02-07

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);
?>

 

これを利用すると、特定のカテゴリのページのみに広告バナーを出したりすることができます。

 

Author:yukio iizuka
プロフィール画像
フリーランスとしてUX視点で業務支援しています。 HCD-Net認定 人間中心設計専門家 LEGO®︎ SERIOUS PLAY®︎ メソッドと教材活用トレーニング修了認定ファシリテーター Hi-Standard好きです。
http://yukioiizuka.com
mislead
MISLEADの記事に共感いただけましたら
いいねをお願いします。

コメント一覧

コメントはありません

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください



       

© yukio iizuka All Rights Reserved...