Разные шаблоны для подкатегорий

25 нояб. 2016 г., 12:55:19
Просмотры: 14K
Голосов: 6

Я хочу использовать разные шаблоны для категорий и подкатегорий. Шаблон категорий установлен в файле category.php. Возможно ли как-то загружать шаблон подкатегорий из файла subcategory.php или подобного?

0
Все ответы на вопрос 2
4
11

Иерархия шаблонов имеет фильтры для всех типов шаблонов. Здесь мы можем использовать category_template, проверить, имеет ли текущая категория родительскую, и в таком случае загрузить файл subcategory.php:

function wpd_subcategory_template( $template ) {
    $cat = get_queried_object();
    if ( isset( $cat ) && $cat->category_parent ) {
        $template = locate_template( 'subcategory.php' );
    }

    return $template;
}
add_filter( 'category_template', 'wpd_subcategory_template' );
25 нояб. 2016 г. 13:35:27
Комментарии

Думаю, это именно то, что мне нужно. Куда нужно вставить этот код?

TBHM admin TBHM admin
25 нояб. 2016 г. 13:40:55

В файл functions.php вашей темы или в плагин.

Milo Milo
25 нояб. 2016 г. 13:43:02

вам просто нужно заменить subcategory.php на файл, который должен стать родительским шаблоном

Marco V Marco V
10 янв. 2020 г. 18:26:36

@Djanym RE ваше предложенное изменение для проверки isset( $cat ) в первую очередь: я в целом ценю осторожность, но при каких обстоятельствах category_template может быть вызван, когда get_queried_object() возвращает null?

Rup Rup
12 февр. 2022 г. 17:29:41
0

Я отредактировал ваш код, чтобы добавить больше функциональности. Для случаев, когда требуется иметь разные шаблоны для каждой дочерней категории. Например, если у вас категории организованы так:

  • континент
    • страна
      • город

И вам нужен отдельный шаблон для города. Сначала мы проверяем, есть ли у города дочерние элементы, если нет — загружаем шаблон для города. Остальная часть кода проверяет, есть ли у категории родительская категория.

// Разные шаблоны для подкатегорий
function wpd_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', 'wpd_subcategory_template' );
21 июн. 2017 г. 13:21:41