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