カスタムタクソノミーはカスタム投稿とセットで利用することが多いです。例えば、「news」というカスタム投稿、「news_category」というカスタムタクソノミーがある場合、カスタムタクソノミーの一覧もarchive-news.phpを読み込みたいというケースは結構あると思います。
構成がほぼ一緒であれば、カスタムタクソノミーの一覧は、archive-news.phpをコピーしてtaxonomy-news.phpを作成すれば良いですが、個人的にはむやみにファイルを増やしたくないです。taxonomy-news.phpを作成しなかった場合はindex.phpが読み込まれますので、意図した表示にできない場合があります。
そんな時のために、カスタムタクソノミーの一覧でもカスタム投稿の一覧と同じテンプレートを読み込むようにする方法をご紹介いたします。
カスタムタクソノミーの一覧でカスタム投稿の一覧と同じテンプレートを読み込むようにする方法
以下の構成を前提としてご説明いたします。
- カスタム投稿名:news
- カスタムタクソノミー名:news_category
まずは、カスタム投稿の一覧ページ「archive-news.php」を作成しておきます。
続いて、functions.phpに以下コードを追加します。
function my_taxonomy_template_change($query) {
if (is_admin() || !$query->is_main_query()) {
return;
}
if (is_tax('news_category')) {
$query->set('post_type', 'news');
$query->is_archive = true;
}
}
add_action('pre_get_posts', 'my_taxonomy_template_change');
これで、カスタムタクソノミー「news_category」の一覧でも、カスタム投稿「news」と同じarchive-news.phpが読み込まれるようになります。
pre_get_postsを使って、news_categoryの一覧をnewsの一覧扱いにして、読み込むテンプレートを変更しています。
あとがき
カスタム投稿とカスタムタクソノミーの一覧で、共通のテンプレートを使いたい場合は上述した方法をお試しください。