###前提・実現したいこと
新たに作ったカスタム投稿タイプ 'example_B_post_type' があり、
taxonomy.php でタームが割り当てられた記事一覧を表示したい。
###発生している問題・エラーメッセージ
うまくいっているカスタム投稿タイプ 'example_A_post_type' に続き、新たに 'example_B_post_type' を作りました。
プラグイン「Custom Post Type UI」と「Custom Post Type Permalinks」を使って作っています。
記事を書いて公開し、タームを付けても新たに作った方の投稿タイプのみ taxonomy.php で表示されません。
'example_A_post_type' の方は if (have_post()) のメインループに記事が入ってくるのですが、
'example_B_post_type' の方はメインループが空になってしまいます。
記事はありません。
###該当のソースコード
php
1 2<?php 3 if ( have_posts() ) : 4 while ( have_posts() ) : the_post(); 5?> 6 7the_title(): <?php the_title(); ?> 8 9<?php 10 endwhile; 11 else : 12?> 13記事はありません。 14<?php 15 endif; 16?>
###試したこと
カスタム投稿の管理画面で記事が公開状態になっていることは確認し、タームの管理画面上でカウントの欄が1 になっています。
続いて「表示」リンクをマウスオーバーすると出て来る http://www.example.com/example_B_post_type/testB/hogehoge からアクセスしていますが、記事一覧が表示されません。
なお、うまくいく方の投稿タイプは同じ taxonomy.php で表示されます。
(http://www.example.com/example_A_post_type/testA/hogehoge はOK)
CPT UI の「登録済み投稿タイプ/タクソノミー」のパラメータもうまくいく方と同一にそろえてあり、
パーマリンクの空上書きも何度もしています。アパッチの再起動もしました。
WP_Query Object で
うまくいくA は
[post_count] = 1ですが、
うまくいかないB は
[post_count] = 0 となっています。(カスタム投稿の管理画面では記事があるのに)
そのため、$post 自体が出てこないので、if (have_post()) に引っかからないのだと思います。
WP_Term Object ではA, B共に
[count] = 1 となっています。
どのようにすれば $post が生成され、メインループに出てくるようになるでしょうか?
###補足情報(言語/FW/ツール等のバージョンなど)
WordPress v4.5.6
Custom Post Type UI v1.4.3
Custom Post Type Permalinks v2.2.0
その後、WordPress が生成する SQL を見てみたところ、
...中略... ) AND ( wp_postmeta.meta_key = 'hogehoge' ) AND wp_posts.post_type = 'example_B_post_type' (以下略)
というSQLになっており、こちらの 'hogehoge' は 他のカスタム投稿A に設定しているもので、B では使っていないものがSQLに入っていることが分かりました。
MySQL につなぎ、この部分を抜いたSQL を実行すると、求めている結果が得られました。(1歩前進)
ただ、なぜ使っていないカスタムフィールドが条件に入るのかが分からず、どこを修正すれば良いのか分からず困っています。
ためしに、hogehoge をAdvanced Custom Fields管理画面上で消してみましたが、SQLは変わらずでした。
なにか心当たりありましたら、ご教示いただければ幸いです。
うまくいかないSQL SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (154) ) AND ( wp_postmeta.meta_key = 'hogehoge' ) AND wp_posts.post_type = 'example_a_post_type' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value DESC, wp_posts.post_date ASC LIMIT 0, 50;
うまくいくSQL SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (154) ) AND wp_posts.post_type = 'example_a_post_type' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value DESC, wp_posts.post_date ASC LIMIT 0, 50;



回答1件
あなたの回答
tips
プレビュー