【WordPress】カスタムタクソノミーの一覧ページのスラッグをカスタム投稿タイプと同じにした時の404を回避する方法
Index
やりたいこと。
カスタム投稿を「news」、カスタムタクソノミーを「news_cat」とし、タームにinfoを登録した場合。
カスタム投稿タイプ : news
カスタムタクソノミー : news_cat
ターム : info
カスタム投稿タイプ一覧ページ
http://example.com/news/
カスタム投稿タイプの記事ページ
http://example.com/news/ooooooo/
カスタムタクソノミーのターム一覧ページ
http://example.com/news_cat/info/
→ http://example.com/news/info/
STEP1.カスタム投稿をfunctions.phpに設定する
詳しくはこちら。
STEP2.カスタム投稿のタクソノミーを設定
$args = array(
'label' => 'カテゴリー',
'public' => true,
'show_ui' => true,
'hierarchical' => true,
'query_var' => true
);
register_taxonomy('news_cat','news',$args);
$args = array(
'label' => 'カテゴリー',
'public' => true,
'show_ui' => true,
'hierarchical' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'news', //★URLでnews_catと表記されるのをnewsに変更
'hierarchical' => true //★true にすると階層化したURLを使用可能にする
)
);
register_taxonomy('news_cat','news',$args);
STEP3.パーマリンクを設定する
wordpress管理画面「設定」→「パーマリンク設定」のカスタム構造にチェックを入れてカスタムパーマリンクを設定する。多分、何でも大丈夫。今回はこのように設定しました。
http://example.com/%category%/%post_id%/
STEP4.正規表現を使ってURLをリライトする
落とし穴!STEP2だけだと一見できた感じになるけど、アーカイブページでプラグインのWP-PageNaviを使ったページネーションができない。パーマリンク設定を「基本」のパラメーターに戻すと正しく動くのでindex.php?news_cat=○○と認識しているみたい。
そこで正規表現を使ってURLをリライト設定。
// カスタム投稿とカスタムタクソノミーを同一スラッグ(news)にした際に、ページネーションででる404エラーの回避
add_rewrite_rule('news/([^/]+)/page/([0-9]+)/?$', 'index.php?news_cat=$matches[1]&paged=$matches[2]', 'top');
「news」と「news_cat」とある部分を設定するカスタム投稿とカスタムタクソノミーに変えてあげるとOK。
こちらを参考にさせていただきました。
とても詳しく書かれています。