🔗

【WordPress】パーマリンクを /カスタム投稿名/ターム名/投稿名/ にしたい

2022/05/25に公開

実現したいこと

カスタム投稿にタクソノミーとしてカテゴリを追加した際のパーマリンク構成がデフォルトだと分かりにくいので変更する必要がありました。

サイトマップのイメージ

第1階層 第2階層 第3階層
カスタム投稿一覧
ターム別一覧
記事詳細

各ページのパーマリンク

ターム別一覧ページ

デフォルト
http://example.com/カスタムタクソノミー名/ターム名/
実現したいパーマリンク構成
http://example.com/カスタム投稿タイプ名/ターム名/

記事詳細ページ

デフォルト
http://example.com/カスタム投稿タイプ名/投稿名/
実現したいパーマリンク構成
http://example.com/カスタム投稿タイプ/ターム名/投稿名/

①Custom Post Type Permalinksの導入

https://ja.wordpress.org/plugins/custom-post-type-permalinks/

  1. 「Custom Post Type Permalinks」をインストール、有効化
  2. パーマリンク設定画面でカスタム投稿タイプのパーマリンク設定を「/%タクソノミー名%/%postname%/」に設定する
  3. 「カスタマイズされたカスタムタクソノミーのパーマリンクを使用する」にチェックを入れる

この時点で実現しているパーマリンク

ターム別一覧ページ

http://example.com/カスタム投稿タイプ名/タクソノミー名/ターム名/

記事詳細ページ

http://example.com/カスタム投稿タイプ/ターム名/投稿名/

記事詳細ページは実現したい状態になりました!

②ターム別一覧のリンクからタクソノミー名を消す

functions.phpを編集し、ターム別一覧のリンクからタクソノミー名を消します!

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('カスタム投稿タイプ名/([^/]+)/?$', 'index.php?カスタムタクソノミー名=$matches[1]', 'top');
add_rewrite_rule('カスタム投稿タイプ名/([^/]+)/page/([0-9]+)/?$', 'index.php?カスタムタクソノミー名=$matches[1]&paged=$matches[2]',
'top');

下部のadd_rewrite_ruleはページ送りへの対応です!
最後に管理画面の「パーマリンク設定」で「変更を保存」もお忘れないように!

以上で以下のようにパーマリンクの設定ができているはずです!

この時点で実現しているパーマリンク

ターム別一覧ページ

http://example.com/カスタム投稿タイプ名/ターム名/

記事詳細ページ

http://example.com/カスタム投稿タイプ/ターム名/投稿名/

Discussion