WordPressでカスタムタクソノミー(カスタム投稿タイプのカテゴリー)を使用すると、デフォルトではURLにタクソノミー名が含まれます。
このままでも問題はありませんが、シンプルで短く、SEOにも有利なURL構造にしたい場合もあります。
例: https://example.com/news_category/sample/
目標のURL: https://example.com/news/sample/
WordPressのパーマリンクは通常、管理画面から設定しますが、カスタムタクソノミーのURL構造を柔軟にカスタマイズするには、少しのコードを追加する必要があります。
今回は、カスタム投稿タイプ「news」と、それに紐づくカスタムタクソノミー「news_category」を想定して、URLからタクソノミー名「news_category」を削除し、https://example.com/news/から始まるURLに変更するコードとその仕組みを解説します。
コードの全体像
以下のコードを、テーマの functions.php ファイルに追記してください。
function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){
return str_replace('/'.$taxonomy.'/', '/', $termlink);
}
add_filter('term_link', 'my_custom_post_type_permalinks_set',11,3);
add_rewrite_rule('news/([^/]+)/?$', 'index.php?news_category=$matches[1]', 'top');
add_rewrite_rule('news/([^/]+)/page/([0-9]+)/?$', 'index.php?news_category=$matches[1]&paged=$matches[2]', 'top');コードの解説
このコードは、主に以下の2つの役割を果たしています。
- パーマリンクの見た目を変更する
- 新しいURLでアクセスできるようにする
役割1:パーマリンクの見た目を変更する
function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){
return str_replace('/'.$taxonomy.'/', '/', $termlink);
}
add_filter('term_link', 'my_custom_post_type_permalinks_set',11,3);add_filter('term_link', ...) は、WordPressがターム(カテゴリー)へのリンクを生成する際に実行されるフックです。このフックを使って、my_custom_post_type_permalinks_set という関数を実行します。
この関数は、str_replace() を使用して、元のURLに含まれるタクソノミー名(例: /news_category/)を、ただのスラッシュ / に置き換えています。これにより、リンクが生成される時点でURLの見た目がhttps://example.com/news/event/ のように変更されます。
役割2:新しいURLでアクセスできるようにする
add_rewrite_rule('news/([^/]+)/?$', 'index.php?news_category=$matches[1]', 'top');
add_rewrite_rule('news/([^/]+)/page/([0-9]+)/?$', 'index.php?news_category=$matches[1]&paged=$matches[2]', 'top');先ほどのフィルターでURLの見た目は変わりましたが、そのままではその新しいURLにアクセスしても「404エラー」になってしまいます。これは、WordPressがhttps://example.com/news/event/というURLをどう処理すればいいか分からないためです。
そこで add_rewrite_rule() を使って、URLの書き換えルールを追加します。
'news/([^/]+)/?$':https://example.com/news/event/のようなURLパターンにマッチする正規表現です。'index.php?news_category=$matches[1]': マッチしたURLを、WordPressが理解できるクエリパラメータ(?news_category=event)に変換しています。これにより、WordPressは「news_categoryというタクソノミーのeventタームの記事一覧ページを表示すればいいんだな」と認識できます。
2つ目のルールは、ページネーション(page/2など)に対応するためのものです。
適用後の最終ステップ
コードを functions.php に追加したら、必ずパーマリンク設定を更新してください。
管理画面の 「設定」→「パーマリンク設定」 を開き、「変更を保存」ボタンをクリックするだけでOKです。これにより、新しいURLの書き換えルールがWordPressに反映されます。
まとめ
WordPressのURL構造を柔軟にカスタマイズすることで、サイトの見た目だけでなく、ユーザーフレンドリーなサイト構築にもつながります。ぜひ試してみてください。





