[WordPress]カスタムタクソノミーのアーカイブで404 NotFoundになる見落しがちな原因

Posted 2012年4月2日 | Auther dada | Category PC・デジタル | Tag タグ:
Twitterにツイートする Facebookでシェアする はてなブックマーク

追記(2012.04.02)
taxonomy-genre.php の記述を簡略化しました。

WordPressで音楽情報配信のコーナーを作ろうと思いまして、カスタム投稿タイプと、カスタムタクソノミーを作りました。しかし多くの人がつまづくように、僕もタクソノミーのアーカイブページでひっかかりました。最初のページは表示されるのに、2ページ目以降で 404 NotFoundになってしまったのです

http://~/taxname/term/ ← 表示される
http://~/taxname/term/page/2/ ← 404 NotFound

課題は残ったものの一応原因が判明し、解決もしたのでメモとしてまとめたいと思います。なお、投稿タイプ、タクソノミーについては下記のサイトがとてもわかりやすいです。

参考:WordPressでサイト設計をする時に覚えておきたいポストタイプの特徴などいろいろ

テンプレート設定

まず今回の要件は下記のような感じです。

WordPress 3.3.1
カスタム投稿タイプ:sounds
タクソノミー名:genre
分類名:ロック スラッグ:rock
テンプレート:taxonomy-genre.php

カスタム投稿タイプ、カスタムタクソノミーの作成には当初「Custom Post Type UI」を使用していたのですが、リライトルールを色々試す必要があったので、function.php に直接記述しました。

function.php

長いから非表示にします。クリックすると表示されます。

taxonomy-genre.php

タクソノミー「genre」のアーカイブ用テンプレートです。
こちらも長いから非表示にします。クリックすると表示されます。

症状

上記の設定で1ページ目は表示するのですが、2ページは 404.php が表示されてしまいます。

原因

原因は WordPressの[表示設定>1ページに表示する最大投稿数]でした。

wp_taxonomy.png

この時の登録件数は【8件】なのですが、表示件数は【5件】、上記設定は【10件】に設定されていました。

つまり、WP-PageNaviは query_posts() で指定した表示件数を元にページ数を計算しているのに、WordPress自体は表示設定の件数を元に計算していたため、「2ページ目は11件目から表示だろ? 無いね。よろしい、ならば404だ」と判断されてしまっていたのです。

表示設定を同じ【5件】に設定したら問題なく表示されました。
現在は下記のサイトを参考に【1件】に設定しています。

参考:WordPressでquery_postsを使ったページ送りでNot Foundになる件 - 主に技術的なことを書くブログ

その他の試行錯誤

タクソノミーアーカイブの 404 NotFoundで検索するとたいていはタクソノミー登録時のリライト設定が出てきます。flush_rewrite_rules() で解決するパターンもあったりと、いろいろなようです。

他にも見落しがちな原因としては、WordPressのパーマリンク設定の更新です。
設定を変更する必要はなく、「変更を保存」ボタンを押すだけです。
参考:ふじこのプログラミング奮闘記

rewrite を hierarchical にしたら治った例。
参考:rewriteをhierarchical

rewrite を 'with_front'=>false にしたら治った例。
参考:404 error - Category page for custom-taxonomy shows 404 when using custom permalink structure - WordPress - Stack Exchange

タクソノミー名に「-(ハイフン)」が入っていたのが原因ぽい例。
参考:WordPress > フォーラム ? カスタムタクソノミーのアーカイブページで404エラー

flush_rewrite_rules() を加えた例。
参考:WordPress基本設定 | HiroDesignヒロデザインWEB制作会社

スラッグがバッティングしたので変更。
参考:WordPressのカスタム投稿タイプの一覧ページでページ送りを利用する | ちいさな創々

カスタム投稿タイプの 404問題を「Custom Post Type Category Pagination Fix」というプラグインで解決。
参考:カスタム投稿タイプでのページ送り(ページネーション)が「404 Not Found」を返すときの対処法 | 鉄王

まとめ

検索してみるとかなりポピュラーなつまづきポイントなのに、コレという解決策がないのがすごいというかなんというか。WordPress奥が深いです。

関連する記事

No Comments »

No comments yet.

Leave a comment

カテゴリー