🏡まったのブログ

Custom Post Type Permalinks プラグインで子タームに属する記事が404になるエラー

こちらの記事を参考にすると編集画面のパーマリンクは思い通りに表示されるが、実際にそのリンクにアクセスすると404エラー。子タームのURLを省いた形での表示となった。これはCPTUIを使って追加したカスタム投稿タイプでも、functions.phpからコードで追加したカスタム投稿タイプでも同様に起きた。

http://cly7796.net/wp/cms/try-using-custom-post-type-permalinks/#comment-44843

結論「カスタム投稿タイプの階層を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の時点で既知の不具合として
・‘hierarchical’ => trueなカスタム投稿タイプと、’hierarchical’ => trueなカスタム分類を関連づけている
・その投稿タイプパーマリンクにカスタム分類を設定している
・記事が親カテゴリを持つカテゴリ(ターム)に所属している
という3つの条件を満たすと404が出てしまう問題がある

https://www.codamac.jp/blog/custom-taxonomy-404/