Custom Post Type Permalinks プラグインで子タームに属する記事が404になるエラー
目次
こちらの記事を参考にすると編集画面のパーマリンクは思い通りに表示されるが、実際にそのリンクにアクセスすると404エラー。子タームのURLを省いた形での表示となった。これはCPTUIを使って追加したカスタム投稿タイプでも、functions.phpからコードで追加したカスタム投稿タイプでも同様に起きた。
結論「カスタム投稿タイプの階層をfalse」にしてやることで正常に動作します。
標準のパーマリンク構造
プラグインで特に設定を行わない場合、パーマリンクはこうなはず。
カスタム投稿タイプitemの投稿一覧ページ
http://ドメイン名/item/
カスタム投稿タイプitemの投稿詳細ページ
http://ドメイン名/item/投稿名/
カスタムタクソノミーitem_catの投稿一覧ページ
http://ドメイン名/item_cat/ターム名/
カスタムタクソノミーitem_tagの投稿一覧ページ
http://ドメイン名/item_tag/ターム名/
Custom Post Type Permalinks を使った場合
Custom Post Type Permalinks を使って、理想である以下の形を目指した。
カスタム投稿タイプitemの投稿一覧ページ
http://ドメイン名/item/
カスタム投稿タイプitemの投稿詳細ページ
http://ドメイン名/item/投稿名/
カスタムタクソノミーitem_catの投稿一覧ページ
http://ドメイン名/item/item_cat/ターム名/
カスタムタクソノミーitem_tagの投稿一覧ページ
http://ドメイン名/item/item_tag/ターム名/
不具合の原因
Custom Post Type Permalink 自体の不具合だそうで、今回の場合はカテゴリーが階層構造になっていたので、カスタム投稿タイプの階層もTRUEにしてしまうと/%postname%/がターム名として認識され、そのタームの投稿一覧ページを取得しようとして404になるそうです。
なので/%postname%/ではなく/%post_id%/であれば何も変えなくても正常に動作はします。
しかしSEO上は投稿名をURLに含めたいと思うので、カスタム投稿タイプに階層を持たせる(投稿に子投稿を作る)ことがなければ、カスタム投稿タイプ側の階層をFALSEにしてやる対処法をおすすめします。
実現するためにCustom Post Type Permalinksプラグインを使いますが、0.7.9.1の時点で既知の不具合として
https://www.codamac.jp/blog/custom-taxonomy-404/
・‘hierarchical’ => trueなカスタム投稿タイプと、’hierarchical’ => trueなカスタム分類を関連づけている
・その投稿タイプパーマリンクにカスタム分類を設定している
・記事が親カテゴリを持つカテゴリ(ターム)に所属している
という3つの条件を満たすと404が出てしまう問題がある