MENU

【WordPress】カスタムタクソノミーの一覧ページのスラッグをカスタム投稿タイプと同じにした時の404を回避する方法

やりたいこと。

カスタム投稿を「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。

こちらを参考にさせていただきました。
とても詳しく書かれています。

nanimonai

プログラム書く方が楽しいデザイナーです。デザイン事務所→フリーランス→スタートアップ入社→フリーランス(現在)。 全然更新しないのでブログは向いてないと思いつつなんとかやってます。 よければTwitterのフォローもお願いします。

カテゴリー

キーワード

デザインに必須のフリー素材サイト



関連記事