Добавляем вывод товаров WooCommerce по категориям через код: практическое руководство

Диагностика задачи: зачем выводить товары по категориям вручную?

Часто стандартные шорткоды WooCommerce, например [products category="slug"], не дают нужной гибкости для вывода товаров по категориям. Нужно кастомное решение, чтобы контролировать разметку, количество выводимых товаров, сортировку и интегрировать вывод в шаблоны темы или виджеты без сторонних плагинов.

Пошаговое решение: создание кастомного вывода товаров по категориям

1. Получение товаров из категории с помощью WP_Query

Для вывода товаров по категориям используем класс WP_Query с параметрами таксономии product_cat. Пример кода для вывода 8 товаров из категории с ярлыком novinki:

function wpsell_show_products_by_category( $category_slug, $posts_per_page = 8 ) {
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => $posts_per_page,
        'tax_query' => array(
            array(
                'taxonomy' => 'product_cat',
                'field'    => 'slug',
                'terms'    => $category_slug,
            ),
        ),
        'orderby' => 'date',
        'order' => 'DESC',
    );

    $query = new WP_Query( $args );

    if ( $query->have_posts() ) {
        echo '<ul class="wpsell-products-list">';
        while ( $query->have_posts() ) {
            $query->the_post();

            global $product;
            echo '<li>';
            echo '<a href="' . get_the_permalink() . '">' . get_the_title() . '</a>';
            echo '<span class="price">' . $product->get_price_html() . '</span>';
            echo '</li>';
        }
        echo '</ul>';
        wp_reset_postdata();
    } else {
        echo '<p>Товары не найдены в категории ' . esc_html( $category_slug ) . '.</p>';
    }
}

2. Использование функции в шаблонах и шорткоде

Чтобы удобно использовать вывод через редактор, добавим шорткод:

add_shortcode( 'wpsell_products_cat', function( $atts ) {
    $atts = shortcode_atts( array(
        'category' => '',
        'limit'    => 8,
    ), $atts, 'wpsell_products_cat' );

    ob_start();
    if ( ! empty( $atts['category'] ) ) {
        wpsell_show_products_by_category( sanitize_text_field( $atts['category'] ), intval( $atts['limit'] ) );
    } else {
        echo '<p>Укажите категорию товаров в атрибуте category.</p>';
    }
    return ob_get_clean();
});

Теперь можно вывести товары из категории novinki в любом месте сайта с помощью шорткода:

[wpsell_products_cat category="novinki" limit="6"]

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

1. Добавьте код в файл functions.php вашей дочерней темы или в site-specific плагин.
2. Вставьте шорткод с нужной категорией в любую запись или страницу.
3. Убедитесь, что на странице появились товары из выбранной категории с заголовком и ценой.
4. Если товары не отображаются, проверьте, что категория существует и содержит товары.
5. Включите режим отладки WordPress (WP_DEBUG) для выявления ошибок.

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

  • Неверный слаг категории
    Проверьте, что category_slug совпадает с ярлыком категории товара. Ошибка приведет к пустому результату.
  • Отсутствие товаров в категории
    Убедитесь, что в категории есть опубликованные товары со статусом «опубликовано».
  • Код вставлен в неподходящее место
    Код лучше размещать в файлах темы или плагина, не в php-файлах плагинов WooCommerce, чтобы избежать потери при обновлении.
  • Пропущен вызов wp_reset_postdata()
    Без него могут сломаться другие циклы на странице.

Практические советы по безопасности и производительности

  • Используйте sanitize_text_field() для очистки входящих параметров шорткода.
  • Ограничивайте количество выводимых товаров (posts_per_page) для снижения нагрузки на сервер.
  • Кешируйте результаты вывода с помощью transient API, если список меняется нечасто.
  • Не выводите слишком много данных (например, весь контент), чтобы не замедлять загрузку.
  • Используйте стили и классы CSS для адаптивного и аккуратного отображения списка.

Сравнение вариантов вывода товаров по категориям

МетодПлюсыМинусы
Стандартный шорткод WooCommerce
[products category="slug"]
Просто вставить, не требует кода
Поддерживается WooCommerce
Ограниченная кастомизация
Зависит от настроек темы и плагинов
Кастомный WP_Query в коде (как в статье)Полный контроль над выводом
Легко интегрировать в шаблоны
Можно добавлять кастомные поля и оформление
Требует навыков PHP
Необходима проверка безопасности и производительности
Плагины для вывода товаров по категориямГотовые решения с визуальным редактором
Дополнительный функционал (фильтры, ajax)
Могут замедлить сайт
Зависимость от стороннего кода
Не всегда бесплатны
Как отключить автоматическое обновление плагинов WordPress с подтверждением
02.04.2026
Как установить виджеты в WordPress с помощью WPCommunity
07.02.2026
Добавляем вывод товаров WooCommerce по категориям через код: практическое руководство
21.05.2026
Как создать и использовать шорткоды в WordPress
31.10.2025
Как автоматизировать создание резервных копий в WordPress
12.03.2026

Совсем скоро здесь заработает сайт о вордпресс. И будет он связан с продажами, магазинами или чем-то таким.