Фильтр template_include
в WordPress позволяет разработчикам изменять путь к файлу шаблона, который будет использоваться для отображения текущей страницы. Этот фильтр активируется непосредственно перед подключением шаблона, что дает возможность динамически подменить его, основываясь на условиях или параметрах URL.
apply_filters( ‘template_include’, string $template )
Фильтр template_include
может быть полезен, когда нужно задать особый шаблон для конкретной страницы, записи, пользовательского типа записи, категории или таксономии. Этот метод гибче и не требует создания отдельного файла шаблона в теме — путь к шаблону можно назначить программно.
Параметры
$template
(строка): Путь к файлу шаблона, который должен быть подключен WordPress.
Пример 1: Использование кастомного шаблона для страницы «Портфолио»
Если вам нужно назначить уникальный шаблон для страницы с ярлыком «portfolio», вы можете использовать следующий код:
function custom_portfolio_template($template) {
if (is_page('portfolio')) {
$custom_template = locate_template(array('custom-portfolio-template.php'));
if ($custom_template) {
return $custom_template;
}
}
return $template;
}
add_filter('template_include', 'custom_portfolio_template', 99);
Здесь WordPress проверяет, является ли текущая страница «portfolio», и если да, подключает custom-portfolio-template.php
.
Пример 2: Назначение шаблона для всех дочерних страниц
Этот пример покажет, как назначить шаблон для родительской страницы и всех её дочерних страниц. Допустим, родительская страница имеет ID 30
.
function parent_and_children_template($template) {
$parent_page_id = 30;
$post = get_queried_object();
if (is_page($parent_page_id) || $parent_page_id === $post->post_parent) {
return get_theme_file_path('templates/custom-parent-template.php');
}
return $template;
}
add_filter('template_include', 'parent_and_children_template', 10);
Этот код проверяет, является ли текущая страница родительской или дочерней страницей с ID 30
, и если да, подключает шаблон custom-parent-template.php
.
Пример 3: Использование шаблона для архива пользовательского типа записей
Иногда требуется подключить кастомный шаблон для архива определенного типа записи, например, book
.
function custom_post_type_archive_template($template) {
if (is_post_type_archive('book')) {
$custom_template = locate_template(array('archive-book-custom.php'));
if ($custom_template) {
return $custom_template;
}
}
return $template;
}
add_filter('template_include', 'custom_post_type_archive_template', 99);
Этот пример подключает шаблон archive-book-custom.php
для архива записей типа book
.
Пример 4: Условная маршрутизация шаблонов на основе параметров URL
Можно использовать фильтр template_include
для выбора шаблона в зависимости от параметров URL, например, ?action=view
.
function conditional_template_routing($template) {
$action = isset($_GET['action']) ? $_GET['action'] : 'default';
switch ($action) {
case 'view':
$template = __DIR__ . '/templates/view-template.php';
break;
case 'edit':
$template = __DIR__ . '/templates/edit-template.php';
break;
default:
$template = __DIR__ . '/templates/default-template.php';
break;
}
return $template;
}
add_filter('template_include', 'conditional_template_routing');
Здесь, в зависимости от значения action
в URL, WordPress подключит нужный шаблон.
Пример 5: Проверка текущего подключаемого шаблона
Если требуется отладка, можно вывести текущий файл шаблона, чтобы проверить, какой именно подключается WordPress.
function display_current_template($template) {
echo '<div style="color:blue;">Current Template: ' . basename($template) . '</div>';
return $template;
}
add_filter('template_include', 'display_current_template', 99);
Этот код выведет имя текущего шаблона на экран, что может быть полезно для отладки.
Пример 6: Логирование подключаемого шаблона
Если нужно записывать путь подключаемого шаблона в лог для последующего анализа, можно использовать следующий код:
function log_template_path($template) {
error_log('Using template: ' . $template);
return $template;
}
add_filter('template_include', 'log_template_path');
Этот код отправит сообщение с путем к шаблону в лог ошибок сервера, что поможет отслеживать, какой шаблон был загружен.
Пример 7: Загрузка функции в качестве шаблона (альтернативный метод)
Хотя это нестандартный подход, иногда можно использовать функцию в качестве шаблона, если не требуется создавать отдельный файл.
function function_as_template($template) {
if (is_singular('product')) {
custom_product_template();
exit;
}
return $template;
}
add_filter('template_include', 'function_as_template');
function custom_product_template() {
get_header();
echo '<h1>Кастомный шаблон для продукта</h1>';
echo '<p>Здесь отображается информация о продукте.</p>';
get_footer();
}
Этот код подключает шаблон продукта, реализованный в функции custom_product_template
. Хотя такой способ возможен, он нарушает стандарты и рекомендуется только для временного решения.
Заключение
Фильтр template_include
позволяет гибко управлять загрузкой шаблонов в WordPress. Он может использоваться для создания индивидуальных шаблонов для страниц, архива, постов и таксономий. С его помощью можно настроить маршрут для шаблонов, сделать отладку, использовать условные теги и параметры URL. Этот фильтр — мощный инструмент для создания уникальных тем и плагинов, позволяющий настроить отображение сайта максимально гибко.