WordPressにおけるグローバル変数 $post
は、WordPressのループ中で現在処理している投稿(またはカスタムポストタイプ)のオブジェクトを指します。この変数はWordPressコアによって自動的に設定され、投稿の詳細な情報を含んでいます。例えば、投稿ID、タイトル、内容(コンテント)、投稿日時、スラッグなどが含まれます。
グローバル変数 $post
の役割
- 投稿データのアクセス:テンプレートファイルやプラグイン、テーマの関数内で、現在表示または処理中の投稿データにアクセスするために使用されます。
- テンプレートタグのコンテキスト:
the_title()
,the_content()
,the_permalink()
などのテンプレートタグは、$post
変数からデータを取得し、現在の投稿に関連する情報を出力します。
どのように機能するか
WordPressのページを表示する際、メインのクエリ(WordPressループ)を実行して投稿データを取得します。このとき、ループの各イテレーションで $post
変数は現在の投稿オブジェクトで更新されます。これにより、テンプレートタグが正しい投稿データに基づいて動作することが保証されます。
例えば、WordPressの標準ループでは次のように $post
変数が使われます。
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// ここで $post 変数は現在の投稿を指している
the_title(); // 現在の投稿のタイトルを表示
the_content(); // 現在の投稿の内容を表示
endwhile;
endif;
the_post()
関数は内部でグローバル変数 $post
を現在処理中の投稿データで更新します。この変数はループの現在のイテレーションのみ影響し、ループが次のイテレーションに進むと $post
は新しい投稿データで更新されます。
カスタムクエリとグローバル変数 $post
カスタムクエリを使用する場合(例えば get_posts()
や WP_Query
を使った場合)、 setup_postdata($post)
関数を呼び出して手動でグローバル変数 $post
を更新することがあります。これにより、カスタムクエリの結果に基づいてテンプレートタグを適切に機能させることができます。
$myposts = get_posts(array('numberposts' => 5));
foreach ($myposts as $post) : setup_postdata($post);
// ここで $post は get_posts から取得した投稿を指す
the_title();
the_content();
endforeach;
wp_reset_postdata();
ここで、 wp_reset_postdata()
の呼び出しは非常に重要です。これはカスタムクエリの後に $post
を元のメインクエリの現在の投稿データに戻すために使用され、グローバル変数の状態を正常に保ちます。