В WordPress шаблоны — это основа, на которой строится вывод контента на сайте. Правильное понимание и создание иерархии шаблонов позволяет гибко настраивать внешний вид и функциональность страницы в зависимости от её типа. В этой статье мы подробно разберем, как создавать и управлять иерархией шаблонов, чтобы для разных типов страниц использовать разные файлы шаблонов, включая примеры кода и рекомендации по оптимизации.
Что такое иерархия шаблонов WordPress и зачем она нужна
Иерархия шаблонов — это система приоритетов, по которой WordPress ищет нужный файл шаблона для отображения определенного типа контента. Например, для отображения отдельной записи сначала ищется шаблон single-{post-type}.php, затем single.php, а если его нет — index.php.
Иерархия позволяет создавать более точечные и специализированные шаблоны, которые отвечают за отображение определенных типов контента или страниц, не затрагивая все остальные.
Это особенно полезно, если сайт содержит разные типы записей, страницы с уникальным дизайном или сложные структуры с кастомными таксономиями.
Базовая иерархия шаблонов WordPress для страниц и записей
Для понимания важно знать основные шаблоны и их приоритеты:
- Для одиночной записи (пост):
single-{post-type}.php→single.php→singular.php→index.php - Для страницы:
page-{slug}.php→page-{id}.php→page.php→singular.php→index.php - Для архива:
archive-{post-type}.php→archive.php→index.php - Для таксономий:
taxonomy-{taxonomy}-{term}.php→taxonomy-{taxonomy}.php→taxonomy.php→archive.php→index.php
Эти правила можно расширять, создавая свои шаблоны под конкретные задачи.
Как создать кастомную иерархию шаблонов для пользовательских типов записей
Если у вас есть кастомный тип записи, например product, вы можете создать шаблон single-product.php для одиночных страниц продукта и archive-product.php для архива продуктов.
Пример регистрации типа записи с помощью функции wphierarchy_register_custom_post_type():
function wphierarchy_register_custom_post_type() {
$args = [
'public' => true,
'label' => 'Продукты',
'has_archive' => true,
'supports' => ['title', 'editor', 'thumbnail'],
];
register_post_type('product', $args);
}
add_action('init', 'wphierarchy_register_custom_post_type');После регистрации типа записи создайте в теме файл single-product.php. В нём вы можете настроить вывод по своему усмотрению:
<?php get_header(); ?>
<div class="product-single">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<div class="content"><?php the_content(); ?></div>
<?php endwhile; endif; ?>
</div>
<?php get_footer(); ?>Так вы получите отдельный шаблон для продуктов, не затрагивая другие записи.
Создание иерархии шаблонов для кастомных таксономий
Если у вас есть кастомные таксономии, например product_category, вы можете создать шаблоны:
taxonomy-product_category-{term}.php— для конкретного терминаtaxonomy-product_category.php— общий для таксономии
Пример регистрации таксономии и шаблона:
function wphierarchy_register_taxonomy() {
register_taxonomy('product_category', ['product'], [
'label' => 'Категории продуктов',
'hierarchical' => true,
'rewrite' => ['slug' => 'product-category'],
]);
}
add_action('init', 'wphierarchy_register_taxonomy');В файле taxonomy-product_category.php можно вывести список продуктов категории:
<?php get_header(); ?>
<h1><?php single_term_title(); ?></h1>
<?php if (have_posts()) : ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php else : ?>
<p>Нет продуктов в этой категории.</p>
<?php endif; ?>
<?php get_footer(); ?>Использование условных тегов для дополнительной кастомизации иерархии шаблонов
Иногда нужно не просто создать отдельный шаблон, а менять части страницы динамически. Для этого в основном шаблоне можно использовать условные теги WordPress, чтобы выводить контент по-разному в зависимости от ситуации.
Например, в single.php можно добавить:
if (is_singular('product')) {
// Вывод кастомного шаблона для продукта
get_template_part('template-parts/content', 'product');
} else {
// Стандартный вывод для других записей
get_template_part('template-parts/content', get_post_type());
}Такой подход позволяет не создавать множество отдельных файлов, а поддерживать логику в одном месте.
Примеры плагинов для управления иерархией шаблонов
Если хочется упростить работу с иерархией шаблонов, можно использовать плагины:
- WP Theme Template Hierarchy Inspector — показывает, какой шаблон используется для текущей страницы.
- Custom Post Type UI — для удобной регистрации кастомных типов записей и таксономий.
- Advanced Custom Fields — для добавления метаполей, которые помогут менять шаблоны динамически.
Также обратите внимание на Clearfy Pro — мощный инструмент для оптимизации и настройки WordPress, который может помочь с управлением шаблонами и структурой сайта.
Как отлаживать иерархию шаблонов: советы и инструменты
Для понимания, какой шаблон используется на странице, полезно добавить следующий код в functions.php вашей темы:
function wphierarchy_debug_template() {
global $template;
echo '<!-- Используемый шаблон: ' . basename($template) . ' -->';
}
add_action('wp_footer', 'wphierarchy_debug_template');Это выведет в исходном коде страницы название файла шаблона, что удобно для отладки.
Также рекомендуются плагины, упомянутые выше, и инструменты разработчика браузера для анализа HTML и CSS.
Выводы и рекомендации по созданию иерархии шаблонов
Создание иерархии шаблонов — важный этап кастомизации сайта на WordPress. Оно позволяет гибко управлять выводом контента, не создавая избыточных файлов и поддерживая чистоту кода.
Всегда начинайте с понимания базовой структуры иерархии, а затем расширяйте её под свои нужды, используя кастомные типы записей, таксономии и условные теги.
Использование плагинов для регистрации типов и анализа шаблонов значительно ускорит процесс разработки и упростит поддержку.