setup_postdata() の使い方|説明・引数・注意点

説明

setup_postdata() は、指定した投稿を元に、the_title() などのテンプレートタグ用のグローバル変数を設定する関数です。

基本構文

setup_postdata( WP_Post|object|int $post ): bool

引数

  • $post:投稿オブジェクトまたはID

戻り値

設定できたら true。

使い方(サンプル)

foreach ( get_posts() as $post ) {
	setup_postdata( $post );
	the_title();
}
wp_reset_postdata();

注意点

  • $post というグローバル変数に代入してから呼ぶ必要があります。
  • 終わったら wp_reset_postdata() を呼びます。

実務での使いどころ

  • get_posts() で取得した投稿を、the_title() などのテンプレートタグで出力するとき。
  • 独自に取得した投稿オブジェクトを、ループのように扱いたいとき。

よくあるミスと対処

  • setup_postdata() は、グローバルの $post を書き換えない。$id などの変数を設定するだけなので、関数の中で使うときは global $post; が必要。
  • 呼んだ後に、wp_reset_postdata() で元に戻していない。
  • ループの変数名が $post 以外で、グローバルの $post と別の変数になっている。

NG例

foreach ( $posts as $p ) {
	setup_postdata( $p );
	the_title(); // 現在のページの情報が出る場合がある
}

OK例

global $post;
foreach ( $posts as $post ) {
	setup_postdata( $post );
	the_title();
}
wp_reset_postdata();

使い分け早見表

場面 使うもの
get_posts の結果を、テンプレートタグで出力 setup_postdata()
WP_Query のループ $query->the_post()(内部で同じ処理が行われる)
値だけが欲しい $post->post_title など、プロパティを直接使う

関連項目

wp_reset_postdata()、get_posts()

公式リファレンス:setup_postdata() | Function | WordPress Developer Resources

コメント

タイトルとURLをコピーしました