Автоматизация создания шаблонов для постов в WordPress — частая задача, когда требуется выводить записи с уникальным оформлением в зависимости от категории, тега или пользовательского поля. В этой статье разберём, как создать такие шаблоны с помощью кода и плагинов, чтобы не создавать отдельные файлы шаблонов вручную.
Почему нужны автоматические шаблоны для постов
Стандартная тема WordPress использует единый шаблон single.php для всех записей. Но часто бизнес-требования требуют, чтобы посты разных категорий, типов или с определёнными метками отображались по-разному. Например, для новостей нужен один стиль, для обзоров — другой, а для обучающих материалов — третий.
Создавать отдельные файлы шаблонов single-category.php или single-posttype.php можно, но это усложняет поддержку и масштабирование темы. Поэтому логично делать шаблон динамическим, меняя разметку и функционал в зависимости от условий.
Создание автоматического шаблона через фильтр template_include
Один из самых гибких способов — перехватить выбор шаблона через фильтр template_include и подставить нужный файл или сгенерировать вывод программно.
add_filter('template_include', 'wptemplates_filter_single_template');
function wptemplates_filter_single_template($template) {
if (is_single()) {
$post = get_queried_object();
if (has_category('news', $post)) {
$new_template = locate_template(array('single-news.php'));
if ($new_template) {
return $new_template;
}
}
if (get_post_meta($post->ID, 'special_template', true) === 'yes') {
$new_template = locate_template(array('single-special.php'));
if ($new_template) {
return $new_template;
}
}
}
return $template;
}
В данном примере мы проверяем, если у поста категория 'news', подгружаем шаблон single-news.php, если метаполе 'special_template' содержит 'yes' — подгружаем single-special.php. Если шаблоны не найдены — возвращаем стандартный.
Создание кастомных шаблонов по типам записей и меткам
Для кастомных типов записей (CPT) можно также использовать аналогичный подход. Например, для CPT «portfolio» создадим шаблон single-portfolio.php, WordPress подгрузит его автоматически. Но если нужно более гибко, фильтр template_include поможет подставить любые файлы.
Использование плагинов для шаблонов: WP Page Template и Custom Post Type UI
Если хочется упростить процесс без кодинга, рекомендуем плагин WP Page Template — он позволяет создавать и назначать шаблоны для постов и страниц через админку, включая кастомные типы.
Для удобного управления типами записей используйте Custom Post Type UI. Вместе они позволяют быстро организовать структуру сайта с автоматическим выводом по шаблонам.
Динамический вывод контента в шаблонах с помощью get_post_meta и have_rows (ACF)
Для глубокой кастомизации шаблонов часто используют пользовательские поля. Плагин Advanced Custom Fields (ACF) позволяет создавать сложные структуры данных и выводить их в шаблоне.
Например, чтобы вывести галерею изображений из поля ACF 'gallery', используйте следующий код в вашем шаблоне:
if (function_exists('get_field')) {
$images = get_field('gallery');
if ($images) {
echo '<div class="gallery">';
foreach ($images as $image) {
echo '<img src="' . esc_url($image['url']) . '" alt="' . esc_attr($image['alt']) . '" />';
}
echo '</div>';
}
}
Такой подход позволяет менять структуру вывода без создания множества шаблонов, просто меняя данные в админке.
Пример создания динамического шаблона для категории "Обзоры" с кастомным выводом
Допустим, у вас есть категория «Обзоры» и вы хотите, чтобы у постов этой категории был уникальный вывод: заголовок, оценка (плагин Expert Review), видеообзор и список характеристик.
Создайте файл single-review.php и подключите его через фильтр:
add_filter('template_include', 'wptemplates_single_review_template');
function wptemplates_single_review_template($template) {
if (is_single() && has_category('obzory')) {
$new_template = locate_template('single-review.php');
if ($new_template) {
return $new_template;
}
}
return $template;
}
В файле single-review.php используйте код для вывода оценки из плагина Expert Review:
if (function_exists('expert_review_get_score')) {
$score = expert_review_get_score(get_the_ID());
echo '<div class="review-score">Оценка: ' . esc_html($score) . '</div>';
}
Добавьте видеообзор, используя поле ACF с типом видео:
$video_url = get_field('video_review');
if ($video_url) {
echo wp_oembed_get($video_url);
}
И список характеристик из повторяющихся полей:
if (have_rows('characteristics')) {
echo '<ul class="characteristics-list">';
while (have_rows('characteristics')) {
the_row();
$name = get_sub_field('name');
$value = get_sub_field('value');
echo '<li>' . esc_html($name) . ': ' . esc_html($value) . '</li>';
}
echo '</ul>';
}
Рекомендации по организации шаблонов и производительности
Чтобы шаблоны оставались удобными в поддержке, придерживайтесь следующих правил:
- Используйте дочерние темы для кастомизации, чтобы не потерять изменения при обновлении.
- Разбивайте шаблоны на части через
get_template_part()для повторного использования. - Кешируйте сложные запросы и данные ACF, чтобы снизить нагрузку.
- Используйте плагины, такие как Clearfy Pro, для оптимизации и контроля загрузки скриптов и стилей.
Выводы и полезные ссылки
Автоматические шаблоны позволяют гибко управлять выводом контента, экономя время и упрощая поддержку сайта. Используйте фильтр template_include для выбора нужного шаблона, ACF и плагин Expert Review для расширенного контента, а также WP Page Template для удобного создания шаблонов через интерфейс.
Полезные ссылки: