特定のカテゴリーアーカイブ用のテンプレートを作成する場合、category-news.phpのようなテンプレートを追加します。category-news.phpを追加すると、newsというカテゴリーのアーカイブでは、archive.phpやcategory.phpではなく、category-news.phpが適用されるようになります。
先日とある案件で、特定カテゴリーのアーカイブページではテンプレートを分け、さらにその子カテゴリーでも親カテゴリーと同じテンプレートを適用したいというケースがありました。
通常は、親子関係であっても、カテゴリー名やIDが異なるので、親カテゴリー用に追加したテンプレートは適用されず、子カテゴリーではarchive.phpやcategory.phpが適用されてしまいます。
それぞれの子カテゴリー用にテンプレートを追加するのはちょっとなー…と思っていたら、WordPress私的マニュアルさんにドンピシャな記事がありましたので、ご紹介したいと思います。
子カテゴリーのアーカイブページで親カテゴリーと共通のテンプレートを適用する方法
子カテゴリーのアーカイブページでも親カテゴリーと共通のテンプレートを適用するには、functions.phpに以下を追加します。
function my_category_template( $template ) {
$category = get_queried_object();
if ( $category->parent != 0 && ( $template == "" || strpos( $template, "category.php" ) !== false ) ) {
$templates = array();
while ( $category->parent ) {
$category = get_category( $category->parent );
if ( !isset( $category->slug ) ) break;
$templates[] = "category-{$category->slug}.php";
$templates[] = "category-{$category->term_id}.php";
}
$templates[] = "category.php";
$template = locate_template( $templates );
}
return $template;
}
add_filter( 'category_template', 'my_category_template' );
例えば、category-news.phpを追加すると、newsの子カテゴリーでもcategory-news.phpが適用されるようになります。
category-8.phpのようにタームIDで作成したテンプレートにも対応しています。
あとがき
共通のテンプレートを利用することで、子カテゴリーが後から増えても対応できますね。
なかなかニッチな状況かもしれませんが、親子関係にあるカテゴリーで共通のテンプレートを適用したい時は、ぜひお試しください。