ウェベン!

カスタム投稿のパーマリンクの基本とカスタマイズ【WordPress】

カスタム投稿を追加したときに、
タクソノミー一覧ページなどのパーマリンクってなんだっけ?
となることがあります。

あとできれば、パーマリンクをキレイに整理できたらな~とも。

毎回毎回忘れて調べていたので、ここにメモ。

カスタム投稿のパーマリンクの基本

まず前提として、カスタム投稿を以下のように追加しているとします。

  • カスタム投稿タイプ products
  • カスタムタクソノミー products-cat
  • ターム sell, rental

そうすると、デフォルトでは以下のようなパーマリンクになっています。

カスタム投稿タイプの記事一覧ページ

▼ archive-products.phpなど

サイトURL/products/

サイトURLの後ろにカスタム投稿名が入ります。

タームの記事一覧ページ

▼ taxonomy.phpなど

サイトURL/products-cat/sell/

サイトURLの後ろにカスタムタクソノミー名が入り、その後ろにターム名が入ります。

記事詳細ページ

▼ single-products.phpなど

サイトURL/products/記事スラッグ/

サイトURLの後ろにカスタム投稿名が入り、その後ろに投稿時に設定した記事スラッグが入ります。

カスタム投稿のパーマリンクを整理する方法

ここからはパーマリンクを整理する方法。
個人的には、以下のようになるのが理想なんです。

  • カスタム投稿一覧ページ → サイトURL/products/
  • タームの記事一覧ページ → サイトURL/products/category/sell/
  • 記事詳細ページ → サイトURL/products/記事スラッグ/

つまり、タームの記事一覧ページのパーマリンクを変えたいということです!

タームの記事一覧ページのパーマリンクを変更する

▼ functions.php

//タクソノミーを作成
register_taxonomy(
  'products-cat',
  'products',
  array(
    'label' => '製品カテゴリー',
    'labels' => array(

      'add_new_item' => '新規カテゴリーを追加',

    ),
    'public' => true,
    'hierarchical' => true,
    'rewrite' => array(
      'slug' => 'products/category', //ここを希望のスラッグに変更
      'hierarchical' => true //階層化したURLを使用可能にする
    )
  )
);

まずは、タクソノミーを作成する記述(= register_taxonomy )のところの’rewrite’を設定します。
‘slug’を希望のスラッグに変更します。

次に404エラーの対策をしていきます。

▼ functions.php

// 書き換えたスラッグに対応したリライトルールを追加
add_rewrite_rule('products/category/([^/]+)/?$', 'index.php?products-cat=$matches[1]', 'top');

//リダイレクト処理
add_action( 'template_redirect', 'my_redirect' );
function my_redirect() {
  $url_now = $_SERVER['REQUEST_URI'];
  if($url_now == "/products/category/"){  //リダイレクトさせたいurl
    $url = home_url('/products/', 'http'); //リダイレクト先のurl
    wp_safe_redirect( $url, 301 );
    exit();
  }
}

「旧パーマリンク」から「新パーマリンク」への書き換えを2行目で、
「サイトURL/products/category/」から「サイトURL/products/」へのリダイレクトを5行目以降で行っています。

おわりに

その他、もっともーーーっと細かくパーマリンクをカスタマイズしたい方はこちら。
今回参考にさせていただいたサイトです。
参考:カスタムタクソノミーのパーマリンクをいい感じにしたい|Libreco

キーワード: