質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1751閲覧

特定のタクソノミーアーカイブページで、記事が出なくなる。

syws

総合スコア9

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/04/17 09:09

編集2020/04/17 09:52

発生している問題・エラーメッセージ

wordpressサイトで幾つかのカスタム投稿タイプと、それに紐付いているタクソノミーがあります。
カスタム投稿タイプと、タクソノミーはCustom Posttype UI (CPTUI) というプラグインで追加しています。

以下、各投稿タイプとタクソノミーです

■ 投稿タイプ shop
タクソノミー genre (これのアーカイブがおかしい)

■ 投稿タイプ school
タクソノミー school-genre

上記のうち、タクソノミー genre のタクソノミーアーカイブページのみ、メインクエリの記事が空っぽ(ゼロ記事)になり、「記事はありません」と出てしまいます。
ただ、おかしいのが、「/shop/?genre=sushi」(ドメイン省略)というパスのページでは記事がちゃんと表示されるのですが、
「/?genre=sushi」では空っぽになってしまうのです。

呼び出されているテンプレートは「/shop/?genre=sushi」では「archive-shop.php」が呼び出され、
「/?genre=sushi」では「archive.php」が呼び出されています。
しかし、この2つのテンプレートの内容はほぼすべて同じで、仮にサーバーから「archive-shop.php」を削除して、
「/shop/?genre=sushi」のページで、「archive.php」が呼び出されても、「/shop/?genre=sushi」ではちゃんと記事が表示されますが、「/?genre=sushi」で、同じ「archive.php」のテンプレが呼び出されたのに、やはりクエリの結果が空っぽになっています。


上記投稿タイプ「school」に同じ様なタクソノミーで「school-genre」というのがありまして、
こちらは、例えば、「/school/?school-genre=tutoring-school/」と「/?school-genre=tutoring-school/」のそれぞれのURLでも表示されます。


functions.phpの内容を全て削除してみたり、CPTUIのタクソノミー設定をいくつかいじってみても、どうしても「/?genre=sushi」では空っぽになってしまいます。


pre_get_postsの$query変数を確認してもみましたが、記事が無いクエリに特段おかしいところがあるわけでもなく、
post_typeがなかったので、以下のsetをやってみましたが、それでも「/?genre=sushi」では空っぽになってしまいます。

php

1$query->set( 'post_type', $post_type );

以下は、pre_get_postsの$query変数をvar_dumpしたものです。

「/?genre=sushi」 記事が空っぽになる
https://pastebin.com/cbDUNkwY

「/shop/?genre=sushi」 記事がちゃんと出る
https://pastebin.com/GrndzkkW

「/?school-genre=tutoring-school/」 記事がちゃんと出る
https://pastebin.com/xZyh8J0d


また、gitで過去のソースにcheckoutして、戻してみても、「/?genre=sushi」では記事が空っぽになります。


最近入れたプラグインで「Popup Maker」というのがあり、それをいったん削除してみましたが、それでもなおりませんでした。


以下、Custom Post Type Permalinksの設定です。
イメージ説明
イメージ説明

同じ様なバグの経験がある方、また、解決方法に思い当たるふしがあれば、何でもいいのでご教示下さい。
原因が分からず、困り果てております。。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/17 09:13

Custom Post Type Permalinksは使用していますか? 使用している場合はどのような設定になっていますか。
syws

2020/04/17 09:52

すみません。質問本文にCustom Post Type Permalinksの設定スクショを追加しました よろしくお願いいたします
guest

回答2

0

自己解決

すみません。。

polylangの設定の問題でした。
投稿タイプshopやタクソノミーgenreに対して、polylangの設定で、多言語化するよう設定されていたものの、
既存のshopの投稿には、言語のメタデータが設定されていないため発生していました。

今後はクエリがおかしくなったら、まずpolylangを疑うようにします。。。

投稿2020/04/20 03:31

syws

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下ではアクセスできないでしょうか?
/shop/genre/sushi/

/?genre=sushi
は、WordPress標準の「投稿 (post_type=post)」を表示しようとしているのだと思われます。
「投稿」にはカスタムタクソノミー「genre」は指定していないですよね?

そのため「archive.php」が呼び出され、「記事が空っぽになる」という状態になるのだと思います。

投稿2020/04/17 14:30

new1ro

総合スコア4528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syws

2020/04/20 02:50 編集

ありがとうございます。 「/shop/genre/sushi/」は記事がでるのですが、今やりたい事としては 「/shop/?genre=sushi」でも、「/?genre=sushi」でも、「sushi」が付いている記事は全てひっかかってほしいです。 「/?genre=sushi」では、できれば投稿タイプの指定が無い状態にしたくて、 例えば「genre」のタクソノミーが、投稿タイプ「shop」「post」の両方に設定されていれば、その両方から記事をとってきてほしいですし、デフォルトではそうなっていたはずですが、何らかのバグで今クエリがおかしくなっている状況です。 --- 確かに投稿にgenreを設定し、記事にそのgenreを設定したら、その記事だけ出ましたので、「archive.php」ではメインクエリがpost_type=postになってしまっているようなのですが pre_get_postsでフックして、「$query->set('post_type', 'shop');」と強制的にshopに絞って、「/?genre=sushi」にアクセスすると、「archive-shop.php」が呼び出されるものの、記事は見つからない という症状になっています。 pre_get_postsでフックして、「$query->set('post_type', 'any');」や「$query->set( 'post_type', array('post','shop'));」としても、「/?genre=sushi」にアクセスすると、「archive.php」が呼び出されるものの、投稿タイプ「'post'」の「genre=sushi」の記事は出るのですが、投稿タイプ「'shop'」の記事は見つからない という症状になっています。 「/?genre=sushi」にアクセスし、「archive.php」が呼び出された場合、「post_type=shop」の記事が出てこないという現象で、これを出るようにしたいのですが、(デフォルトでは出るのですが、何かのバグで出なくなっています)こういった現象が起きる原因で、クエリに問題があるのか、タクソノミー設定に問題があるのか、あるいは他の原因なのかわからないのですが、何か思い当たる解決策あればご教示頂ければ幸いです。 よろしくお願いいたします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問