🔗

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

2022/05/25に公開3

実現したいこと

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

サイトマップのイメージ

第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

kota1010kota1010

まさに自分が求めていることなのですが、やってみたら

Fatal error: Uncaught Error: Call to a member function add_rule() on null in~~

と、エラーが出てしまいました。記述は間違えていないと思うのですが・・・何か原因等わかりますでしょうか。PHPは8.1.23、WordPressは6.5.2、Local上で作成中のサイトです。

k1b3k1b3

記録を残しておらず申し訳ないのですが本記事の執筆時、2年前のバージョンですので、拡張自体のバージョン齟齬もあるかもしれません...🙇‍♂️

kota1010kota1010

そうですか、わざわざご返信ありがとうございました🙇‍♂️