【状況】
例えば、不動産の記事を「エリア」「賃貸の種類」「こだわり条件」のような複数タクソノミーで管理しているとします。
「エリア(チェックボックスで複数選択可)」「賃貸の種類(同)」「こだわり条件(同)」で絞込検索ができる状態にしました。
絞込検索自体はうまくいくのですが、ページネーションで2ページ目、投稿表示数などの設定によっては3ページ目、3ページ目が404エラーになります。
例えば、検索結果が13件となる検索に対して、WP設定の表示投稿数が1、検索結果表示時にプログラム側で指定したposts_per_pageの値が12なら最後までページビューは動きます。それがposts_per_pageの値が2以下だと、7ページ目からはNotFoundとなります。
【対処】
404ページはそれ以外の情報がないため、404ページとsearch.phpのコードを同じにして、どういう値で検索しようとしているかを調べてみることにしました。
すると、404ページはタイトルこそ404でしたが、中身は検索の続き。つまり、ちゃんとURLのGET値はきちんと取得され、情報も返されているような状態になりました。
ですので、URLに「s値」がある場合、ページは404だけど中身は検索のコードが走るように変更することにしました。
【原因がわかりました!!】
ACFプラグインで作ったタクソノミーの初期設定が原因でした!
タクソノミーを作った後、「高度な設定」を「ON」にして、URLから、Publicly Queryableを「OFF」にします。
Publicly Queryable は「URLs for an item and items can be accessed with a query string.」とあります。
アイテムの URL にクエリ文字列を使用してアクセスできるかどうかを制御します。とあります。
なのでURLにタクソノミーの文字列がある場合は、タクソノミーの検索として動いていたのかも。
たしかに、タクソノミーの選択肢が1つだった場合はうまく動いてたりしていました。複数になるとうまくいかなかったり、私がタクソノミーの設定によってはそれを無意識にOFFにしているところもあったので、OFFにしていれば複数選択時にはうまく動いていたのかもしれません。
posts_per_pageとWP設定の表示投稿数との関係がよくわかりませんが……。投稿の順番でOFFになっているタクソノミー所属と、ONになっているタクソノミー所属の記事の兼ね合いなどもあるかもしれません。
詳細検索のとき、GETに利用する変数をタクソノミーのスラッグそのままを利用していたので、それが影響していたのでしょう。タクソノミーのスラッグからのアーカイブと、複数検索の検索結果表示を同時に生かしたい場合は、Publicly QueryableをONにして、検索結果のGETの変数をタクソノミーのスラッグそのままではなくて、少し面倒ではありますが、s_slugと言う風に変更させてプログラムを書くと両立できるのかもしれません。
なるほどなぁ…今まで複数選択による検索がうまくいかないと思ってたのは、これが原因なのかも。
コメントを残す