特定のタクソノミー名だけをURLから削除する方法【WordPress】


URLからタクソノミー名を消したい

WordPressでカスタム投稿タイプのターム(カテゴリー)ページを開くと、このようになりますよね。

https://exsample.com/投稿タイプ名/タクソノミー名/ターム名/

それをこうしたい。ということです。
https://exsample.com/投稿タイプ名/ターム名/

と、ここまでのやり方は色んな方が書かれているのですが、特定のタクソノミーだけを削除したい

それ以外のタクソノミーは通常通り、表示させたいのです。

しかし、ネット上にある情報だとそのようなものがなかったため作りました。

URLから削除したいタクソノミー

https://exsample.com/投稿タイプ名/タクソノミー1/ターム名/

https://exsample.com/投稿タイプ名/ターム名/

URLから削除したくないタクソノミー

https://exsample.com/投稿タイプ名/タクソノミー2/ターム名/

https://exsample.com/投稿タイプ名/タクソノミー2/ターム名/

https://exsample.com/投稿タイプ名/タクソノミー3/ターム名/

https://exsample.com/投稿タイプ名/タクソノミー3/ターム名/

URLから特定のタクソノミーだけ消す方法

ということで、試行錯誤して作りました。
まずはソースから。@で囲われている部分を変更してください。

対象のタクソノミー:URLから消したいタクソノミー
対象外のタクソノミー:URLから消したくないタクソノミー(例では2と3のふたつを挙げています)

function.php
// URLから特定のタクソノミー名だけを削除
function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){
if($term->taxonomy == '@対象のタクソノミースラッグ名@') {
return str_replace('/'.$taxonomy.'/', '/', $termlink);
}else {
return $termlink;
}
}
add_filter('term_link', 'my_custom_post_type_permalinks_set',11,3);
add_rewrite_rule('^(?=.*@投稿タイプスラッグ名@/([^/]+)/?$)(?!.*@投稿タイプ@/@対象外のタクソノミー1スラッグ名@)(?!.*@投稿タイプスラッグ名@/@対象外のタクソノミー2スラッグ名@).*$', 'index.php?@対象のタクソノミースラッグ名@=$matches[1]', 'top');

何をしているのか解説をすると、

①対象となるタクソノミーだけURLから削除
②add_rewrite_ruleでリライトルールを変更

という2つのことをしています。

特に②ではURLから削除したくないタクソノミー(対象外のタクソノミー)を、記載する必要があります。
でないと削除したくないタクソノミーまでリライトルールが変わってしまう為、リンクをクリックした際に404ページに飛んでしまいます。

参考にしていただければ幸いです。

記事を読んで頂いている読者の方へ

いつも多くのいいね・シェア・ツイートを頂きありがとうございます。
無料での情報発信において、1人1人の応援が私たちのモチベーションに繋がっています。


明日から使える!
3ステップでつくるデジタルマーケティング戦略シート

ステップ1~3のテンプレートに入力するだけで、貴社のマーケティング戦略に役立つ「デジタルマーケティング戦略シート」が完成します。

無料ダウンロードページへ
  • 関連記事
  • おすすめ記事
PAGE TOP