共通のタクソノミーを使う場合、「Custom Post Type Permalinks」が好相性、というお話。
異なる投稿タイプ間で共通のタームを使いたい場合、「複数の投稿タイプで、共通のタクソノミーを使う」で書いた方法で実現できますが、タームのアーカイブも共通化されてしまいます。当たり前ですが。
困る例
例えば、投稿タイプ「求人情報」と「スタッフ紹介」でタクソノミー「施設」を共有している場合。
「求人情報」投稿タイプ
└ 「施設」タクソノミー
└ 「東京タワー」ターム
「スタッフ紹介」投稿タイプ
└ 「施設」タクソノミー
└ 「東京タワー」ターム
このとき、アーカイブ「東京タワー」のURLは「/施設/東京タワー/」となります。
タグリストで「get_term_link()」などを使った場合でも、同様のURLになると思います。
結果、「求人情報」と「スタッフ紹介」が串刺しで表示されます。
こういう結果が必要な場合もあると思いますが、「求人情報」一覧からタグを選んだら、やはり「求人情報」のアーカイブを表示するのが自然と思います。
投稿タイプを明示する
では、URL「/求人情報/施設/東京タワー/」にアクセスするとどうなるか。
404になります。
これを手っ取り早く解決するには、プラグイン「Custom Post Type Permalinks」がお手軽。
有効にした後、パーマリンク設定の下の方に現れるオプションを両方チェックします。
- カスタマイズされたカスタムタクソノミーのパーマリンクを使用する。
- カスタムタクソノミーのアーカイブに、 post_typeクエリーを追加
こうすることで、URL「/求人情報/施設/東京タワー/」は、「求人情報」の「東京タワー」タームのアーカイブを表示するようになります。
ポピュラーなプラグインなので、大事故などは無いと思いますが、サーバー環境に依存するような気もします。
串刺しが必要な場合
逆に、串刺しの表示結果が必要な場合、URL「/施設/東京タワー/」でOK。
タグリストも変えてくれる
get_term_link()などでタグリストを表示している場合、こちらも細工が必要かと思ったら、勝手にURL変えてくれました。
「home_url( ‘/’ ) . $post_type . ‘/’ . $tax . ‘/’ . $term->slug」みたいな書き方は必要ないようです。
なので、テンプレートの書き換えは恐らく必要ないと思いますが、固定ページやウィジェットなどへの直書きURL、ナビゲーションメニューのカスタムリンクなどは要注意です。
テンプレート次第?
ここまでの話は、カスタム投稿のテンプレートを1つにまとめている環境での例です。
投稿タイプごとにテンプレートを分けている場合などはどうなるかわかりません。
また、URLを変更するので、既存サイトには使いにくいですね。
新規サイトや、SSL化するタイミングなど、サイトマップが変わっても構わない場合のご参考に。