web-dev-qa-db-ja.com

WP_Queryを使って投稿コンテンツにアクセスする

投稿情報を取得するためのテンプレートからの次のコードがあります。

<?php
 $args = array(
    'post_type'      => 'post',
    'posts_per_page' => $count,
    'paged'          => $paged,
);
$wp_query = new WP_Query( $args );
?>

<?php if ( $wp_query->have_posts() ) : ?>
    <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
        <?php echo $wp_query->post_title.'<br>';
    <?php endwhile; ?>
<?php endif; ?>

ここに投稿のタイトルなどを表示したいのですが、上のようにしてみたところ何も表示されませんでした。投稿情報にアクセスするにはどうすればいいですか。

2
user1048676

まず第一に、$wp_queryグローバル変数を使用して悪用しないでください。このグローバルはメインクエリ専用に予約されるべきです。競合を引き起こさないような他の変数を使用してください。

次に、生の WP_Postプロパティ を使用しないでください。これらは生のままでフィルタ処理されていません。 WP_Queryはデフォルトでpostdataを設定します。これはテンプレートタグの使用を可能にします。

3番目に、 always WP_Queryのすべてのインスタンスをリセットして、同じページ上の他のクエリとの競合を回避します。

4番目に、この行<?php echo $wp_query->post_title.'<br>';に構文エラーがあります。閉じているphpタグがありません

あなたはこのような何かにあなたのコードを書き直すことができます

 $args = array(
  'post_type'      => 'post',
  'posts_per_page' => $count,
  'paged'          => $paged,
);
$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) { 
    $query->the_post();
        the_title();
        the_content();
    }
    wp_reset_postdata();
}

編集

WP_Postプロパティに直接アクセスする必要がある場合は、例えば

echo apply_filters( 'the_content', $query->post_content );

投稿内容を表示する

echo apply_filters( 'the_title', $query->post_title );

投稿のタイトルを表示します。投稿ステータスには、以下からアクセスできます。

$query->post_status

利用可能なすべてのプロパティの一覧を見る ここ

WP_Postプロパティを使わずにこれらの情報を表示するためにループ中に利用できる テンプレートタグ があることを覚えておかなければなりません

3
Pieter Goosen

コードにわずかなエラーがあります。ループを開始したら($wp_query->the_post();を設定した後にこれを行います)、WordPressテンプレートタグを使用して投稿からコンテンツにアクセスし始めることができます。あなたがタイトルとコンテンツを見せたいのであれば、それはこのようになります:

<?php
$args = array(
  'post_type'      => 'post',
  'posts_per_page' => $count,
  'paged'          => $paged,
);
$wp_query = new WP_Query( $args );
?>

<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<h3><?php the_title(); ?></h3>
<p><?php the_content(); ?></p>
<?php endwhile; ?>
<?php endif; ?>

WP_Query および templateタグ を読むことをお勧めします。

0
Jason Hoffmann