質問編集履歴

3 SQL 追加

minpanpy

minpanpy score 6

2017/02/13 16:45  投稿

WordPress の taxonomy.php でリストが表示されない
###前提・実現したいこと
新たに作ったカスタム投稿タイプ '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
<?php
 if ( have_posts() ) :
   while ( have_posts() ) : the_post();
?>
the_title(): <?php the_title(); ?>
<?php
   endwhile;
 else :
?>
記事はありません。
<?php
 endif;
?>
```
###試したこと
カスタム投稿の管理画面で記事が公開状態になっていることは確認し、タームの管理画面上でカウントの欄が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 の「登録済み投稿タイプ/タクソノミー」のパラメータもうまくいく方と同一にそろえてあり、
パーマリンクの空上書きも何度もしています。アパッチの再起動もしました。
<?php print_r($wp_query); ?> を taxonomy.php で実行すると
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
![CPT UIの設定画面](ca446549734fa5bd8c8e0ff6e305e4f7.png)
その後、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;
```
  • WordPress

    14547 questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

2 SQL を調べたところ原因が分かりましたが、原因の除去ができません。

minpanpy

minpanpy score 6

2017/02/13 16:31  投稿

WordPress の taxonomy.php でリストが表示されない
###前提・実現したいこと
新たに作ったカスタム投稿タイプ '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
<?php
 if ( have_posts() ) :
   while ( have_posts() ) : the_post();
?>
the_title(): <?php the_title(); ?>
<?php
   endwhile;
 else :
?>
記事はありません。
<?php
 endif;
?>
```
###試したこと
カスタム投稿の管理画面で記事が公開状態になっていることは確認し、タームの管理画面上でカウントの欄が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 の「登録済み投稿タイプ/タクソノミー」のパラメータもうまくいく方と同一にそろえてあり、
パーマリンクの空上書きも何度もしています。アパッチの再起動もしました。
<?php print_r($wp_query); ?> を taxonomy.php で実行すると
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
![CPT UIの設定画面](ca446549734fa5bd8c8e0ff6e305e4f7.png)
![CPT UIの設定画面](ca446549734fa5bd8c8e0ff6e305e4f7.png)
その後、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は変わらずでした。
なにか心当たりありましたら、ご教示いただければ幸いです。
  • WordPress

    14547 questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

1 設定画面のスクショを追加しました。

minpanpy

minpanpy score 6

2017/02/02 16:15  投稿

WordPress の taxonomy.php でリストが表示されない
###前提・実現したいこと
新たに作ったカスタム投稿タイプ '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
<?php
 if ( have_posts() ) :
   while ( have_posts() ) : the_post();
?>
the_title(): <?php the_title(); ?>
<?php
   endwhile;
 else :
?>
記事はありません。
<?php
 endif;
?>
```
###試したこと
カスタム投稿の管理画面で記事が公開状態になっていることは確認し、タームの管理画面上でカウントの欄が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 の「登録済み投稿タイプ/タクソノミー」のパラメータもうまくいく方と同一にそろえてあり、
パーマリンクの空上書きも何度もしています。アパッチの再起動もしました。
<?php print_r($wp_query); ?> を taxonomy.php で実行すると
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
Custom Post Type Permalinks v2.2.0
![CPT UIの設定画面](ca446549734fa5bd8c8e0ff6e305e4f7.png)
  • WordPress

    14547 questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る