Как создать динамический шаблон для категорий WordPress с кастомным выводом

В стандартной теме 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, который поможет оптимизировать и настроить работу сайта.

Удаление и блокировка плагинов WordPress, если стандартные методы не работают
16.01.2026
WooCommerce: как использовать хуки для кастомизации корзины
16.05.2026
Как создать динамический шаблон для WooCommerce с кастомным выводом товаров
17.02.2026
Как оптимизировать производительность WordPress с помощью плагинов и кода
18.11.2025
WooCommerce: установка и настройка AJAX пагинации для каталога товаров
22.04.2026