setup_postdata()


WordPressのsetup_postdata()関数は、指定された投稿のデータをグローバルな$postオブジェクトに設定し、テンプレートタグで使用できるようにします。

シンタックス

setup_postdata( WP_Post $post );
  • $post (WP_Post) — グローバル変数$postとして設定する投稿オブジェクト。

例 1: 投稿データの設定とタイトルの表示

指定した投稿IDを基にタイトルを取得します。

<?php
global $post;
$post = get_post( get_the_ID() );
setup_postdata( $post );
echo '<h2>' . get_the_title() . '</h2>';
wp_reset_postdata();
?>

例 2: カスタムループでの使用

カスタムループ内でsetup_postdata()を利用し、テンプレートタグを動作させます。

<?php
$query = new WP_Query( array( 'post_type' => 'post', 'posts_per_page' => 3 ) );
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        setup_postdata( $post );
        echo '<h3>' . get_the_title() . '</h3>';
        wp_reset_postdata();
    }
}
?>

例 3: 複数の投稿オブジェクトを処理する

複数の投稿オブジェクトを取得し、setup_postdata()を使ってデータを設定します。

<?php
$posts = get_posts( array( 'numberposts' => 3 ) );
foreach ( $posts as $post ) {
    setup_postdata( $post );
    echo '<h4>' . get_the_title() . '</h4>';
}
wp_reset_postdata();
?>

例 4: カスタム投稿タイプでの利用

カスタム投稿タイプcustom_typeのデータを処理します。

<?php
$args = array( 'post_type' => 'custom_type', 'posts_per_page' => 1 );
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        setup_postdata( $post );
        echo '<p>' . get_the_content() . '</p>';
        wp_reset_postdata();
    }
}
?>

注意事項

  • カスタムクエリやループ内でsetup_postdata()を使用する際は、必ずwp_reset_postdata()を呼び出してグローバル状態をリセットしてください。
  • 標準ループ内での使用は不要です。

関連機能: