2014年04月12日

子カテゴリーにも親カテゴリーのテンプレートを使う

親カテゴリーと子カテゴリーのアーカイブテンプレートを共通にする場合

例えばproductsというスラッグのカテゴリーでcategory-products.phpというテンプレートファイルで表示されている場合で、その子カテゴリのテンプレートもcategory-products.phpで表示させたい場合。

もしくは
category-5.phpというファイルをカテゴリーIDが5のテンプレートとして使用していて、子カテゴリーのアーカイブもcategory-5.phpで表示させたい場合。

つまり、

category-[slug].php
category-[ID].php

をその子カテゴリーアーカイブでも使えるようにするソース。

functions.phpに記述

//親カテゴリと子カテゴリのアーカイブテンプレートを共通にする
add_filter( 'category_template', 'my_category_template' );

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;
}

参考サイト
【WordPress】親カテゴリーのテンプレートを子カテゴリーにも適用する方法

特定の親カテゴリーの子カテゴリーだけ、親カテゴリーのテンプレートを適用させる場合

functions.phpに記述

add_filter( 'category_template', 'my_category_template' );
function my_category_template( $template ) {
$category = get_queried_object();
if ( $category->parent == 3 ) {
$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;
}

4行目にカテゴリIDを入れる。上記は親カテゴリIDが3の場合。