WordPressのパンくずリストプラグインと言えば、「Breadcrumb NavXT」ですよね。
あるときパンくずリストをクリックすると、404エラーが起きました。
はじめは、URLのリライト関係のコードを間違えたバグかと思っていましたが、ブラウザのURLをよく見ると「?post_type=○○○」となっていました。
「?post_type=○○○」を消すとちゃんと表示されるので、こいつが悪さをしていることが判明。
「?post_type=○○○」が付く原因
自分の場合はタクソノミーのアーカイブページのURLにこれが付くようになっていた。
該当のタクソノミーは複数のカスタム投稿タイプで使用していたので、もしやと思い試しに一つのカスタム投稿タイプでのみ使用するように変更してみた。
すると、「?post_type=○○○」がなくなっている。
これはおそらく、複数のカスタム投稿タイプで使用したときにどの投稿タイプだったか判断するための目印じゃないかと推測。
なので原因は、タクソノミーを複数のカスタム投稿タイプで使用したことだと思われる。
パンくずリストのURLから「?post_type=○○○」を消す方法
Breadcrumb NavXTのフィルターを使用して消します。
functions.phpに以下のコードを書いておけば、URLに「?post_type=○○○」が付かないようになります。
1 2 3 4 5 | add_filter('bcn_add_post_type_arg', 'my_bcn_add_post_type_arg', 10, 3); function my_bcn_add_post_type_arg($add_query_arg, $type, $taxonomy) { return false; } |
最初は頑張ってコード書いて消さないといけないかな?とか思っていましたが、ちゃんと用意してくれてました。
調べると、Breadcrumb NavXTは便利なフィルターを結構用意してくれているので、良いですね。
コードがスッキリして嬉しいです。
Breadcrumb NavXTのDocumentation
おまけ
ちなみに、フィルターって無名関数が使えるので、上で紹介したコードを以下のように書くこともできます。
1 2 3 | add_filter('bcn_add_post_type_arg', function($add_query_arg, $type, $taxonomy) { return false; }, 10, 3); |
自分はこのコードで書きました。
かっこいいから。