説明
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

コメント