前提・実現したいこと
Wordpressのサイトでトップページに「投稿の一覧(ページング付き)」を表示しています。
(設定>表示設定>ホームページの表示 に 「最新の投稿」 を選んでいる状態です)
投稿とは別に、カスタム投稿タイプ 'books' を作っています。
トップページに、投稿の一覧と、カスタム投稿 'books' の記事を混ぜて表示したいです。
ただし、カスタム投稿 'books' の記事は、カスタムフィールドで「トップページに表示するかどうか(keyは'is_show')」のチェックボックスがあり、これが true になっている記事のみ、表示したいです。
現状は、functions.php に pre_get_posts で、下記のような諸条件を書いています。
該当のソースコード
PHP
1 2//functions.php 3function pre_get_posts_custom( $query ) { 4 if( is_admin() || ! $query->is_main_query() ){ 5 return; 6 } 7 8 if( $query->is_home() ){ 9 $query->set( 'post_type', array( 'books','post' ) ); 10 $meta_query = array( 11 array( 12 'key' => 'is_show', 13 'value' => true, 14 'compare' => '=' 15 ) 16 ); 17 $query->set( 'meta_query', $meta_query ); 18 } 19 20} 21add_action( 'pre_get_posts', 'pre_get_posts_custom' ); 22
PHP
1 2//home.php 3//ループ部分のみ抜粋、twentynineteenのデフォルトほぼそのままです 4 5if ( have_posts() ) { 6 while ( have_posts() ) { 7 the_post(); 8 get_template_part( 'template-parts/content/content' ); 9 } 10 twentynineteen_the_posts_navigation(); 11} 12 13
発生している問題
上記コードを書いた結果、トップページには、カスタム投稿'books'で、カスタムフィールドの key:'is_show' がtrueになっている記事しか表示されません。
これはエラーではなく、仕様だと認識しています。
投稿には、カスタムフィールド'is_show'は存在しておらず、該当する記事がないため、この結果にならざるを得ません。
この場合、投稿(post)にも同じようにカスタムフィールドを設定し、true値を設定すれば表示されるのはわかっているのですが、可能ならそれをしないで実現したいです。
知りたいこと
おそらく、pre_get_posts では無理筋なのは薄ぼんやり予感していますが、確信が持てません。望みなしであればそのようにご指摘が欲しいです。
また、この方法ならできそう、というものがあれば、具体的なコードなどは求めませんので、概念レベルで示唆をいただけましたら大変ありがたく思います。
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/08 08:16
2019/05/10 05:47