Исключение товаров и вариантов WooCommerce по атрибуту: практическое руководство

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

В интернет-магазинах на WooCommerce часто возникает необходимость скрыть из каталога или поиска определённые товары или их варианты по конкретным атрибутам. Например, скрыть все товары с атрибутом «Сезон: Зима» или варианты с определённым цветом без удаления из базы. Такое исключение помогает управлять ассортиментом без потери данных и удобнее, чем удаление или создание сложных условий видимости.

Как проверить, что товары и варианты нужно исключить именно по атрибуту

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

  • Перейдите в Товары > Атрибуты и проверьте список атрибутов и терминов.
  • Откройте отдельный товар, переключитесь на вкладку Атрибуты, убедитесь, что нужный термин назначен.
  • Для вариаций откройте вкладку Вариации и проверьте назначенные атрибуты.

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

Пошаговое решение: исключение товаров и вариантов через фильтр запроса WooCommerce

Реализуем исключение товаров и вариантов по атрибуту на уровне запроса каталога и поиска. Для этого используем хук pre_get_posts. Пример кода, который исключит все товары с атрибутом pa_sezon и значением zima (slug термина):

add_action('pre_get_posts', function($query) {
    if (!is_admin() && $query->is_main_query() && (is_shop() || is_product_category() || is_product_tag() || is_search())) {
        $tax_query = (array) $query->get('tax_query');
        $tax_query[] = array(
            'taxonomy' => 'pa_sezon',
            'field'    => 'slug',
            'terms'    => array('zima'),
            'operator' => 'NOT IN',
        );
        $query->set('tax_query', $tax_query);
    }
});

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

Исключение отдельных вариантов с помощью шаблона фильтрации на фронтенде

WooCommerce не позволяет на уровне WP_Query скрыть вариации — только сам товар. Чтобы скрыть конкретные варианты, можно убрать их из выпадающих списков вариаций на странице товара с помощью JavaScript или фильтров PHP.

Пример фильтра для исключения варианта по атрибуту на странице товара:

add_filter('woocommerce_variation_is_active', function($active, $variation) {
    $terms = wp_get_post_terms($variation->get_id(), 'pa_cvet', array('fields' => 'slugs'));
    if (in_array('krasnyj', $terms)) {
        return false; // скрываем варианты с цветом "красный"
    }
    return $active;
}, 10, 2);

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

  • Очистите кэш сайта и браузера.
  • Перейдите в каталог WooCommerce и убедитесь, что товары с атрибутом pa_sezon=zima не отображаются.
  • На странице товара проверьте, что варианты с атрибутом pa_cvet=krasnyj не отображаются в селекторе вариаций.
  • Проверьте поиск по сайту — исключённые товары также не должны показываться.

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

  • Кэширование мешает проверить изменения
    Решение: отключите плагин кеширования или очистите кеш после внесения изменений.
  • Неправильный слаг атрибута или термина
    Решение: проверьте точные значения slug в Товары > Атрибуты и в терминах.
  • Код добавлен в неправильное место
    Решение: вставьте код в файл functions.php дочерней темы или используйте сниппет-плагин.
  • Исключение вариаций не работает
    Причина: WooCommerce не фильтрует вариации на уровне WP_Query.
    Решение: используйте фильтр woocommerce_variation_is_active или JavaScript для скрытия вариантов.
  • Ошибка в логах после добавления кода
    Решение: проверьте синтаксис PHP, используйте error_log для отладки.

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

  • Не добавляйте тяжелые запросы в pre_get_posts без условий, чтобы не замедлять фронтенд.
  • Используйте кэширование объектов и страниц, чтобы снизить нагрузку на сервер.
  • Проверяйте код на тестовом сайте перед внедрением в продакшен.
  • Для сложных условий фильтрации рассмотрите создание пользовательского поля (post meta) и фильтрацию по нему, если таксономии не подходят.
  • Для управления ассортиментом безопаснее использовать дочерние темы или сниппеты, а не править плагины WooCommerce напрямую.

Сравнение вариантов реализации исключения товаров

МетодПлюсыМинусы
Фильтрация WP_Query через pre_get_postsПростота реализации; исключение из каталога и поискаНе скрывает вариации; возможно влияние на производительность при сложных запросах
Фильтр woocommerce_variation_is_activeСкрывает варианты на странице товараНе исключает товары полностью; требует доп. проверки на совместимость с темой
JavaScript на фронтендеГибко, можно скрывать любые элементыМенее надёжно, зависит от клиента; не подходит для SEO
Создание пользовательских полей и фильтрация по нимБолее точечный контроль; гибкостьТребует дополнительной настройки; сложнее для поддержки
Исключение товаров и вариантов WooCommerce по атрибуту: практическое руководство
22.04.2026
Как удалить зависшие задачи WP-Cron в WordPress
06.12.2025
Как правильно отключить и удалить плагины в WordPress без оставшихся данных
05.01.2026
Как использовать WooCommerce хуки для настройки процесса оформления заказа
22.04.2026
Как создать собственную настройку в админке WordPress с примерами кода
29.03.2026