Рубрики
Wordpress

Используем одинаковый шаблон для рубрик и подрубрик в WordPress

Для того, чтобы для какой-то отдельной рубрики в WordPress сделать свой шаблон, достаточно создать в директории с вашей темой файл с именем category-slug.php или category-ID.php, где slug — это ярлык, ЧПУ — идентификатор рубрики, а ID — идентификатор рубрики.

Slug (ярлык) рубрики можно найти в списке рубрик:

ID рубрики легко можно узнать, наведя указатель мыши на её название в списке. В строке состояния браузера (обычно она находится внизу окна) появится Url этой категории, где можно увидеть ID этой рубрики. Например: для URL http://www…..ru/wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=4&post_type=post ID рубрики будет 4.

Таким образом, в приведенном примере для того, чтобы у рубрики «Blog» был свой шаблон, мы должны создать файл с именем category-blog-2.php или category-4.php.

Но если в этой рубрике у нас будут вложенные разделы, то для них будет использован шаблон по умолчанию category.php.

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

function new_subcategory_hierarchy() {
    $category = get_queried_object();

    $parent_id = $category->category_parent; // ID родителя

    $templates = array();

    if ($parent_id == 0) {
        // Если родителя нет, используем значения по умолчанию
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";
        $templates[] = 'category.php';
    } else {
        // Создаем массив $templates на замену стандартному
        $parent = get_category($parent_id);

        // Если для текущей рубрики определены файлы шаблона, они будут использованы в первую очередь
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";

        // И только потом - файлы шаблонов родительской рубрики 
        $templates[] = "category-{$parent->slug}.php";
        $templates[] = "category-{$parent->term_id}.php";
        $templates[] = 'category.php';
    }
    return locate_template($templates);
}

add_filter('category_template', 'new_subcategory_hierarchy');

UPDATE. Код для рубрик любого уровня вложенности. Использоваться будет шаблон наиболее близкого родителя текущей рубрики.

function new_subcategory_hierarchy() {
    $category = get_queried_object();
 
    $parent_id = $category->category_parent; // ID родителя
 
    $templates = array();
 
	while ($parent_id !== 0)
	{	
		// Создаем массив $templates на замену стандартному
        $parent = get_category($parent_id);
 
        // Если для текущей рубрики определены файлы шаблона, они будут использованы в первую очередь
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";
	
		// Следующий родитель
		$category = $parent;
		$parent_id = $parent->parent;
	}
        $templates[] = "category-{$parent->slug}.php";
        $templates[] = "category-{$parent->term_id}.php";
        $templates[] = 'category.php';
		
		// Значение по умолчанию
        $templates[] = 'category.php';
		
    return locate_template($templates);
}
 
add_filter('category_template', 'new_subcategory_hierarchy');

 

10 ответов к “Используем одинаковый шаблон для рубрик и подрубрик в WordPress”

Просто огромное человеческое спасибо. Только у вас была эта информация.

Уважаемый админ, ОГРОМНЕЙШЕЕ СПАСИБО ЗА ДАННУЮ ИНФОРМАЦИЮ!!!
Установил в файл functions.php и думаю, ну что опять промах. Ан, нет все работает замечательно.
Дочерние рубрики применили Родительский шаблон в отдельной категории, где я определил, кака двух колоночный в виде миниатюр.
Еще раз большое Вам спасибо

Большое спасибо! Перелопатил весь интернет и только у Вас нашлась нормальная статья c работающим кодом. Все работает на ура!

Данный метод работает только я категорий первого уровня вложенности. Если потомков больше, то уже не работает.

Добавил второй вариант, который должен работать для категорий любого уровня вложенности

Спасибо друг!
Код который правильно работает, это большая редкость!

В исправленном варианте ошибка — шаблон родительской рубрики работает для дочерних, но не работает для самой родительской. Поправила, вот рабочий код:

function new_subcategory_hierarchy() {
$category = get_queried_object();

$parent_id = $category->category_parent; // ID родителя

$templates = array();

while ($parent_id !== 0)
{
// Создаем массив $templates на замену стандартному
$parent = get_category($parent_id);

// Если для текущей рубрики определены файлы шаблона, они будут использованы в первую очередь
$templates[] = «category-{$category->slug}.php»;
$templates[] = «category-{$category->term_id}.php»;

// Следующий родитель
$category = $parent;
$parent_id = $parent->parent;
}
$templates[] = «category-{$category->slug}.php»;
$templates[] = «category-{$category->term_id}.php»;
$templates[] = «category-{$parent->slug}.php»;
$templates[] = «category-{$parent->term_id}.php»;
$templates[] = ‘category.php’;

// Значение по умолчанию
$templates[] = ‘category.php’;

return locate_template($templates);
}

add_filter(‘category_template’, ‘new_subcategory_hierarchy’);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *