В базовой иерархии шаблонов, вы можете использовать следующие шаблоны для категорий:
category-{slug}.php
category-{id}.php
category.php
Но, если вам нужно применять разные php-шаблоны для категорий и подкатегорий, вы можете использовать хук category_template
и проверять, есть ли у текущей категории родительский элемент, и в этом случае загружать, например, subcategory.php
:
function wpz_subcategory_template( $template ) {
if ( is_category() && 0 < get_queried_object()->category_parent ) {
$template = locate_template( 'subcategory.php' );
}
return $template;
}
add_filter( 'category_template', 'wpz_subcategory_template' );
Если же у вас задача сделать разные шаблоны для каждого уровня вложенности, например такого:
- continent
- country
- city
- country
То, мы должны использовать следующую логику: сначала смотрим, есть ли у города дочерний элемент, если нет, мы вызываем шаблон для города. Остальная часть кода предназначена для проверки наличия у категории родительского элемента.
function wpz_subcategory_template( $template ) {
$cat = get_queried_object();
$children = get_terms( $cat->taxonomy, array(
'parent' => $cat->term_id,
'hide_empty' => false,
) );
if ( ! $children ) {
$template = locate_template( 'category-country-city.php' );
} elseif ( 0 < $cat->category_parent ) {
$template = locate_template( 'category-country.php' );
}
return $template;
}
add_filter( 'category_template', 'wpz_subcategory_template' );