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

Сценарий знакомый: в каталоге WooCommerce одна или несколько категорий товаров должны выглядеть иначе, чем остальные. Например, для распродажи нужен другой баннер, для оптовой категории — отдельный текст и фильтры, а для сезонной подборки — свой набор блоков. Если править общий шаблон архива, изменения затронут весь магазин. Если пытаться решить это настройками темы, обычно быстро упираешься в ограничения.

Надёжный путь — отдать конкретной категории свой шаблон через иерархию шаблонов WordPress и при необходимости добавить точечную логику в functions.php или в мини-плагин. Ниже разберём рабочую схему: как диагностировать, какой шаблон сейчас используется, как подключить отдельный файл для категории и как проверить, что WooCommerce действительно подхватил нужную разметку.

Когда отдельный шаблон действительно нужен

Не стоит делать отдельный шаблон ради одной строки текста. Этот подход оправдан, если у категории есть заметно отличающаяся структура страницы:

  • другой верхний баннер или промоблок;
  • свой набор фильтров или сортировки;
  • отдельный текст перед списком товаров;
  • дополнительные блоки после каталога;
  • особая сетка карточек или количество товаров в строке.

Если отличие только в заголовке или описании категории, часто достаточно стандартного поля описания категории и фильтра woocommerce_archive_description. Но если нужен именно другой шаблон, лучше не перегружать общий archive-product.php.

Диагностика: какой шаблон WooCommerce использует сейчас

Перед правками полезно понять, откуда вообще берётся текущая разметка. WooCommerce для архивов товаров смотрит на шаблоны темы в определённом порядке. Для категорий товаров это обычно один из вариантов: taxonomy-product_cat.php, archive-product.php или шаблоны из самой темы.

Проверка через структуру темы

Откройте папку активной темы и проверьте, есть ли там уже файлы:

  • taxonomy-product_cat.php;
  • archive-product.php;
  • woocommerce/archive-product.php;
  • woocommerce/taxonomy-product_cat.php.

Если файл taxonomy-product_cat.php уже существует, именно он обычно будет приоритетным для категорий товаров. Если его нет, WooCommerce пойдёт дальше по цепочке шаблонов.

Быстрая проверка через временный вывод

Если нужно убедиться, что шаблон подхватывается, можно временно добавить комментарий в файл шаблона или вывести заметный тестовый блок. Например:

<?php
/**
 * Template for product category archive.
 */
get_header( 'shop' );
?>

<div class="category-template-debug" style="padding:12px;background:#fff3cd;border:1px solid #ffeeba;">
    Используется шаблон taxonomy-product_cat.php
</div>

<?php
woocommerce_content();
get_footer( 'shop' );

Если после обновления страницы блок не появился, значит тема использует другой файл или шаблон переопределяется дочерней темой/плагином.

Пошаговое решение: отдельный шаблон для одной категории

Самый практичный вариант — создать шаблон для конкретной категории через условие is_product_category() и slug категории. Это удобно, если отличаться должна только одна категория, например sale или wholesale.

Шаг 1. Создайте файл шаблона

В дочерней теме создайте файл taxonomy-product_cat-sale.php не получится как отдельный стандартный шаблон WordPress, потому что для таксономий WooCommerce обычно проще использовать общий файл taxonomy-product_cat.php с условной логикой. Поэтому рабочая схема такая: создаём taxonomy-product_cat.php и внутри проверяем текущий slug категории.

<?php
/**
 * Template for product category archives.
 */

defined( 'ABSPATH' ) || exit;

get_header( 'shop' );

$current_term = get_queried_object();
$current_slug = isset( $current_term->slug ) ? $current_term->slug : '';

if ( 'sale' === $current_slug ) {
    echo '<section class="sale-category-hero">';
    echo '<h1>Товары со скидкой</h1>';
    echo '<p>Подборка акционных товаров с отдельной структурой страницы.</p>';
    echo '</section>';
}

if ( woocommerce_product_loop() ) {
    do_action( 'woocommerce_before_shop_loop' );

    woocommerce_product_loop_start();

    while ( have_posts() ) {
        the_post();
        wc_get_template_part( 'content', 'product' );
    }

    woocommerce_product_loop_end();

    do_action( 'woocommerce_after_shop_loop' );
} else {
    do_action( 'woocommerce_no_products_found' );
}

get_footer( 'shop' );

Этот вариант подходит, если вы хотите изменить верх страницы только для одной категории, но не ломать логику каталога WooCommerce.

Шаг 2. Добавьте отдельные блоки только для нужной категории

Внутрь условия можно вставить баннер, текст, фильтр или любой другой HTML. Главное — не дублировать весь шаблон каталога без необходимости. Например, для категории sale можно добавить промоблок перед списком товаров:

<?php if ( 'sale' === $current_slug ) : ?>
    <div class="sale-category-banner">
        <h2>Скидки недели</h2>
        <p>Показываем только товары из акционной категории.</p>
    </div>
<?php endif; ?>

Если нужен блок после каталога, размещайте его после woocommerce_product_loop_end(). Так вы не вмешиваетесь в стандартную пагинацию и не ломаете карточки товаров.

Шаг 3. Если нужна логика без отдельного файла — используйте хуки

Иногда проще не переписывать шаблон, а добавить блоки через хуки WooCommerce. Это особенно удобно, если дизайн меняется только в одной категории, а базовая структура каталога должна остаться стандартной.

<?php
add_action( 'woocommerce_before_shop_loop', 'wp24_sale_category_notice', 5 );
function wp24_sale_category_notice() {
    if ( ! is_product_category( 'sale' ) ) {
        return;
    }

    echo '<div class="woocommerce-info sale-category-notice">';
    echo esc_html__( 'На этой странице собраны только акционные товары.', 'wp24' );
    echo '</div>';
}

Такой подход безопаснее для обновлений темы: вы не копируете весь шаблон WooCommerce, а добавляете только нужный фрагмент.

Сравнение подходов

ПодходКогда использоватьМинус
Отдельный файл шаблонаНужна заметно другая структура категорииБольше поддержки при обновлении темы
Хуки WooCommerceНужно добавить блоки без переписывания разметкиНе всегда удобно менять сложную верстку
Настройки темыМеняется только текст, баннер или цветОграниченная гибкость

Проверка результата после внедрения

После правок важно проверить не только внешний вид, но и поведение каталога. Ошибки часто проявляются не сразу: например, карточки товаров отображаются, но пагинация или хлебные крошки перестают работать как раньше.

  • Откройте нужную категорию в браузере в режиме инкогнито.
  • Проверьте, что виден именно ваш блок для целевой категории.
  • Перейдите в другую категорию и убедитесь, что изменения туда не попали.
  • Проверьте пагинацию, сортировку и фильтры.
  • Посмотрите исходный код страницы: нет ли дублей заголовка h1 или лишних обёрток.

Если используете кэш, очистите его после правок. Иначе можно долго искать проблему в коде, когда на деле браузер или сервер отдают старую версию страницы.

Частые ошибки и как их исправить

Шаблон положили не в ту папку

Для дочерней темы файл должен лежать в корне темы или в той структуре, которую реально использует ваша тема. Если вы копируете шаблон WooCommerce, проверьте, не переопределяет ли тема его через папку woocommerce.

Сломали стандартный цикл товаров

Если убрать woocommerce_product_loop_start() или woocommerce_product_loop_end(), карточки могут перестать выводиться корректно. Не переписывайте цикл без необходимости. Если нужно только добавить блок, используйте хуки.

Дублируется заголовок категории

Иногда в шаблоне остаётся и стандартный заголовок WooCommerce, и ваш собственный h1. В таком случае отключите лишний вывод через фильтр или уберите дублирующий блок из шаблона.

<?php
remove_action( 'woocommerce_archive_description', 'woocommerce_taxonomy_archive_description', 10 );

Этот приём стоит применять аккуратно: если отключить слишком много, можно потерять полезное описание категории.

Изменения видны только в одной среде

Если на локалке всё работает, а на продакшене нет, проверьте дочернюю тему, кэш-плагин, CDN и наличие переопределённых шаблонов в самой теме. В WooCommerce это частая причина расхождений между окружениями.

Безопасность и производительность

Отдельный шаблон категории сам по себе не тяжёлый, но проблемы появляются, когда в него начинают вставлять запросы к базе на каждый просмотр страницы. Если вам нужно вывести подборку товаров по дополнительному признаку, не делайте лишние запросы в цикле без необходимости.

Практичные правила:

  • используйте дочернюю тему, а не правку родительской;
  • экранируйте вывод через esc_html(), esc_url() и wp_kses_post();
  • не вставляйте в шаблон тяжёлые запросы, если можно обойтись стандартным циклом WooCommerce;
  • после правок проверяйте страницу с включённым кэшем и без него;
  • если шаблон редактирует несколько человек, храните изменения в Git или хотя бы в отдельном сниппете.

Если задача шире и нужно ещё убрать дубли, почистить лишние элементы каталога и ускорить страницы магазина, иногда проще собрать набор точечных оптимизаций в одном месте. Для этого удобно использовать Clearfy Pro, но только там, где он реально закрывает задачу, а не вместо нормальной темы и шаблонов.

Когда лучше не делать отдельный шаблон

Если у категории меняется только один блок, а остальная структура каталога должна совпадать с остальными страницами, отдельный шаблон может быть избыточным. В таком случае лучше добавить условный блок через хук. Это проще сопровождать и меньше шансов сломать обновления WooCommerce.

Отдельный шаблон оправдан, когда:

  • категория — это почти отдельная посадочная страница;
  • нужна уникальная структура контента;
  • в категории есть свои фильтры, баннеры и пояснения;
  • дизайн должен отличаться заметно, а не точечно.

Если же вам нужен только баннер или текст перед товарами, начните с хуков. Это быстрее, безопаснее и обычно достаточно для реального магазина.

Как отключить XML Sitemap в WordPress без потери индексации и дублей
22.08.2026
Как закрыть REST API для гостей в WordPress без поломки админки и плагинов
19.08.2026
Как отключить архив авторов в WordPress без потери SEO и дублей
16.08.2026