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ページに飛んでしまいます。
参考にしていただければ幸いです。