WordPressで、タイトルや本文がなぜか表示されない?

最終更新:2017-05-17 by Joe

WordPressで、the_content()、the_title()が表示されない時、(たぶん)あなたはWordpressのループの概念を知る必要があります。

それではまいります・・。

なぜうまく行かないのか?

(たぶん)the_content()関数内で、参照している投稿IDと、あなたが表示したい投稿のIDが、食い違っています。

the_content()にIDを渡せないのか?

渡すことはできません。the_xxxxx系の関数の多くは、おもに「メインループ」の中で使われる事が意図されている関数です。

メインループ無いでは、投稿IDは一意に決まります。

メインループとは何か?

while( have_posts() ) { }で囲まれるループです。

ループ内で、投稿IDはどうやって決まるのか?

ループ内に必ず実行される、「the_post()」関数に依って決まります。the_posts関数内で、投稿オブジェクトの配列の参照をインクリメントします。

どうすれば、うまく投稿本文を表示できますか?

もしget_postsで取得した、投稿オブジェクト配列ならこのように。

3種類やりかた書きますが、2と3は似ています。the_contentにひもづいている、wp_autop()などのフィルターが実行されますので。

$my_posts = get_posts( $arg );

foreach ( $my_posts as $p ) {
  // 1) プレーンで表示
  echo $p->post_content;

 // 2) the_contentのように、フィルターをかませてから表示
  echo apply_filter( 'the_content', $p->post_content );
 
  // 3) もしくは
 setup_post_data( $p );
  the_content();
}

 

もしQuery オブジェクトなら

$my_query = new WP_Query( $arg );

while ( $my_query->have_posts() ) {
  $my_query->the_posts();

  the_content();
}

 

どちらも、あとで、メインクエリの投稿を参照したければ、wp_reset_postdata()を実行するのを忘れずに。

このへんは、入門者にはわかりにくいですよね。とりあえず方法論だけ。リクエストがアレば、解説もかきます。

参考

  • https://codex.wordpress.org/Function_Reference/wp_reset_postdata
  • https://codex.wordpress.org/Function_Reference/setup_postdata