В стандартной теме WordPress шаблон для категорий (category.php) обычно один и отображает все категории одинаково. Однако часто возникает необходимость создавать разные шаблоны для различных категорий или групп категорий, чтобы кастомизировать вывод контента и улучшить пользовательский опыт. В этой статье разберем, как создать динамический шаблон для категорий WordPress с кастомным выводом, используя возможности WordPress и примеры кода.
Почему важен динамический шаблон для категорий WordPress
Стандартный шаблон category.php ограничивает гибкость оформления и функционала. Например, для категории «Новости» может понадобиться один дизайн, а для «Обзоры» — другой. Динамический подход позволяет:
- Автоматически подгружать нужный шаблон под конкретную категорию.
- Изменять структуру, стили и функционал в зависимости от категории.
- Улучшать SEO за счет уникального оформления категорий.
- Повысить удобство работы с сайтом для посетителей.
Рассмотрим основные методы реализации.
Использование шаблонов category-{slug}.php и category-{id}.php
WordPress по умолчанию поддерживает шаблоны с именами вида category-{slug}.php или category-{id}.php, где {slug} — ярлык категории, а {id} — её ID. Это самый простой способ создавать уникальные шаблоны для отдельных категорий.
Например, для категории с ярлыком news создайте файл category-news.php в папке темы. В нем можно написать кастомный код, который будет применяться только к этой категории.
Однако этот подход неудобен, если категорий много — придется создавать множество файлов.
Пример шаблона category-news.php
<?php get_header(); ?>
<h1>Новости сайта</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(); ?>
Создание одного универсального шаблона с динамической логикой
Чтобы не создавать отдельные файлы для каждой категории, можно использовать один шаблон category.php и внутри него прописать логику для разных категорий.
Для этого в файле category.php используйте условные конструкции на PHP, проверяющие текущую категорию и подгружающие нужные блоки или стили.
Пример динамического шаблона category.php
<?php get_header(); ?>
<?php
$category = get_queried_object(); // Получаем текущую категорию
if ($category->slug === 'news') {
// Шаблон для категории Новости
?>
<h1>Новости</h1>
<div class="news-list">
<?php
if (have_posts()) :
while (have_posts()) : the_post(); ?>
<article>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php the_excerpt(); ?></p>
</article>
<?php endwhile;
else : ?>
<p>Пока нет новостей.</p>
<?php endif; ?>
</div>
<?php
} elseif ($category->slug === 'reviews') {
// Шаблон для Обзоров
?>
<h1>Обзоры товаров</h1>
<div class="reviews-list">
<?php
if (have_posts()) :
while (have_posts()) : the_post(); ?>
<article>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div class="rating">Рейтинг: <?php echo get_post_meta(get_the_ID(), 'review_rating', true); ?>/5</div>
<?php the_excerpt(); ?>
</article>
<?php endwhile;
else : ?>
<p>Обзоров пока нет.</p>
<?php endif; ?>
</div>
<?php
} else {
// Общий шаблон для других категорий
?>
<h1><?php single_cat_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
}
?>
<?php get_footer(); ?>
Такой подход удобен, если категорий немного и для каждой нужно свое оформление. Можно расширять условия и использовать switch для удобства.
Использование плагина Clearfy Pro для управления шаблонами категорий
Плагин Clearfy Pro предоставляет расширенные возможности для оптимизации и управления WordPress, включая функции для тонкой настройки шаблонов и удаления лишнего кода. Его можно использовать для отключения ненужных шаблонов и создания условий отображения контента.
Например, с помощью Clearfy Pro можно отключить вывод определенных элементов на страницах категорий, улучшить скорость загрузки и сделать шаблоны более легковесными.
Это полезно в связке с собственными шаблонами категорий для максимальной производительности и удобства.
Создание кастомного REST API endpoint для вывода категории с кастомной логикой
В сложных проектах может потребоваться реализовать динамический вывод категории не только в шаблонах, но и через REST API, например, для SPA или мобильного приложения. Рассмотрим пример создания кастомного REST API endpoint, который возвращает посты из категории с дополнительными метаданными.
add_action('rest_api_init', function () {
register_rest_route('wptemplates/v1', '/category/(?P<slug>[a-z0-9-]+)', array(
'methods' => 'GET',
'callback' => 'wptemplates_rest_get_category_posts',
));
});
function wptemplates_rest_get_category_posts($request) {
$slug = $request->get_param('slug');
$category = get_category_by_slug($slug);
if (!$category) {
return new WP_Error('no_category', 'Категория не найдена', array('status' => 404));
}
$query = new WP_Query(array(
'cat' => $category->term_id,
'posts_per_page' => 10,
));
$posts = array();
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$posts[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'excerpt' => get_the_excerpt(),
'link' => get_permalink(),
);
}
wp_reset_postdata();
}
return rest_ensure_response(array(
'category' => $category->name,
'posts' => $posts,
));
}
Этот endpoint доступен по URL /wp-json/wptemplates/v1/category/{slug} и возвращает JSON с постами категории.
Советы по оптимизации и поддержке динамических шаблонов категорий
При создании динамических шаблонов важно соблюдать несколько правил:
- Используйте кэширование для уменьшения нагрузки на сервер.
- Разделяйте код на функции, чтобы облегчить поддержку.
- Подключайте стили и скрипты только там, где они нужны, чтобы ускорить загрузку страниц.
- Проверяйте доступность и валидность данных (например, наличие категории).
- Используйте child-тему, чтобы ваши изменения не пропали при обновлении темы.
Для удобства можно создать вспомогательные функции с префиксом wptemplates_, например, для получения шаблона по категории.
Пример вспомогательной функции
function wptemplates_get_category_template($category) {
$template = locate_template('category-' . $category->slug . '.php');
if ($template) {
return $template;
}
return locate_template('category.php');
}
Вызов в category.php:
$category = get_queried_object();
include wptemplates_get_category_template($category);
Заключение
Создание динамического шаблона для категорий — эффективный способ повысить качество и уникальность сайта на WordPress. Используя стандартные механизмы шаблонов, условные конструкции и при необходимости REST API, вы получите гибкий и удобный инструмент управления выводом категорий.
Для расширенных возможностей рекомендуем обратить внимание на Clearfy Pro, который поможет оптимизировать и настроить работу сайта.