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

Pocket

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ページに飛んでしまいます。

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

Pocket

<全15回>
SNSで集客数を増やすための
ノウハウ公開!

当メールセミナーでは、このような方に役立つ情報を無料で発信していきます。

〇「SNSでの集客が上手くいかない」
〇「SNSの集客を基礎から学びたい」
〇「効果的なSNSの活用法を知りたい」

無料メールセミナー申し込み
  • 関連記事
  • おすすめ記事
PAGE TOP