Индивидуальный шаблон подкатегорий определенных категорий в WordPress

WordPress позволяет гибко настраивать шаблоны для определенных страниц, постов, рубрик. Достаточно создать файлы category-{slug}.php или single-{slug}.php и задать индивидуальный шаблон. Но что делать, если у нам необходимо создать определенный шаблон для подкатегорий определенной категории? Скажем, у нас есть «Новости» и подкатегории «Акции», «Новинки» и т.д. и мы бы хотели, чтобы для этих подкатегорий задать определенный шаблон? В этом нам и помогут WordPress hooks.

Функция достаточно простая, после ее применения мы сможем делать шаблоны, создав файлы subcategory-{slug}.php и subcategory-{id}.php, где slug и id — алиас и id родительской категории. Мы добавляем функцию к хуку category_template, где мы можем повлиять на выбор шаблона перед выводом содержимого на страницу:

Данный код вставляем в файл functions.php для активного шаблона.

Суть функции в следующем — если у категории есть родительская категория ($category->category_parent > 0), то задействуем наш код. Получаем данные родительской категории, ее slug и id. Формируем список возможных файлов шаблонов, в том числе и стандартные category-{slug}.php, category-{id}.php, category.php и добавляем к ним еще два возможных варианта — subcategory-{slug}.php и subcategory-{id}.php

locate_template функция делает грязную работу за нас — проверяет наличие файлов из списка, который передали и возвращает полный путь первого найденного. 

Данный код работает только на 1 уровень подкатегорий. Можно модифицировать код, использовав функцию get_category_parents, но это породит дополнительные запросы к БД и обращениям к файловой системе и рекомендуется к использованию в случае действительной необходимости.