Индивидуальный шаблон для страниц page.php по условиям в wordpress

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

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

Рассмотрим два случая:

  1. Когда уровень вложенности больше, чем один. 

    В данном случае мы находим ID всех родительских страниц по цепочке вверх (в этом нам помогает функция get_post_ancestors, возвращающая массив ID), затем смотрим, есть ли в иерархии родителей страница с ID 13 (взято для примера) и задаем для всех страниц с родителем 13 шаблон, находящийся в папке с темой по адресу /page-templates/mypagetemplate.php. В остальных случаях возвращаем шаблон, который был передан в функцию.

  2. Первый вариант более универсальный, но избыточен. В случае, если известно, что уровень вложенности всего один, то лучше использовать упрощенную схему, где мы не ищем всех родителей страницы по цепочке, а сравниваем с непосредственным родителем. Данный подход менее ресурсоемкий

    Все аналогично первому варианту, кроме сравнения с прямым родителем текущей страницы.