🔗
【WordPress】パーマリンクを /カスタム投稿名/ターム名/投稿名/ にしたい
実現したいこと
カスタム投稿にタクソノミーとしてカテゴリを追加した際のパーマリンク構成がデフォルトだと分かりにくいので変更する必要がありました。
サイトマップのイメージ
第1階層 | 第2階層 | 第3階層 |
---|---|---|
カスタム投稿一覧 | ||
ターム別一覧 | ||
記事詳細 |
各ページのパーマリンク
ターム別一覧ページ
デフォルト
http://example.com/カスタムタクソノミー名/ターム名/
実現したいパーマリンク構成
http://example.com/カスタム投稿タイプ名/ターム名/
記事詳細ページ
デフォルト
http://example.com/カスタム投稿タイプ名/投稿名/
実現したいパーマリンク構成
http://example.com/カスタム投稿タイプ/ターム名/投稿名/
①Custom Post Type Permalinksの導入
- 「Custom Post Type Permalinks」をインストール、有効化
- パーマリンク設定画面でカスタム投稿タイプのパーマリンク設定を「/%タクソノミー名%/%postname%/」に設定する
- 「カスタマイズされたカスタムタクソノミーのパーマリンクを使用する」にチェックを入れる
この時点で実現しているパーマリンク
ターム別一覧ページ
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
まさに自分が求めていることなのですが、やってみたら
Fatal error: Uncaught Error: Call to a member function add_rule() on null in~~
と、エラーが出てしまいました。記述は間違えていないと思うのですが・・・何か原因等わかりますでしょうか。PHPは8.1.23、WordPressは6.5.2、Local上で作成中のサイトです。
記録を残しておらず申し訳ないのですが本記事の執筆時、2年前のバージョンですので、拡張自体のバージョン齟齬もあるかもしれません...🙇♂️
そうですか、わざわざご返信ありがとうございました🙇♂️