WooCommerce: как исключить товары по атрибуту из поиска и фильтров

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

Иногда в магазине WooCommerce требуется скрыть из результатов поиска и фильтров товары с определённым атрибутом. Например, товары с атрибутом "Скрытый" или "Снят с продажи" не должны отображаться в каталоге, но при этом остаются в базе для отчетности или повторного актива.

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

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

Для начала убедитесь, что у товаров есть нужный атрибут и он корректно присвоен. В админке WordPress перейдите в Товары > Атрибуты, выберите нужный атрибут, нажмите "Настроить термины" и проверьте, что товары действительно имеют этот атрибут.

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

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

1. Перехват запроса поиска и фильтрации WooCommerce

Для исключения товаров по атрибуту необходимо изменить WP_Query, который отвечает за выборку товаров на странице каталога, поиска и фильтрации.

2. Используем фильтр woocommerce_product_query

Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:

add_action('woocommerce_product_query', 'exclude_products_by_attribute_from_query');
function exclude_products_by_attribute_from_query($query) {
    // Название атрибута без префикса 'pa_'
    $attribute_slug = 'skrytyy'; // замените на ваш slug атрибута

    $tax_query = (array) $query->get('tax_query');

    $tax_query[] = array(
        'taxonomy' => 'pa_' . $attribute_slug,
        'field' => 'slug',
        'terms' => array('yes'), // замените на термин, который обозначает скрытые товары
        'operator' => 'NOT IN',
    );

    $query->set('tax_query', $tax_query);
}

В этом примере исключаются товары, у которых в атрибуте pa_skrytyy установлен термин yes. Это значит, что товары с этим термином не попадут в выборку WooCommerce.

3. Проверка корректности кода

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

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

  • Выполните поиск по каталогу — товары с исключённым атрибутом не должны отображаться.
  • Проверьте фильтры — примените фильтрацию по другим атрибутам, исключённые товары не должны появляться.
  • Протестируйте прямой доступ по URL товара с исключённым атрибутом — он должен оставаться доступен, если не требуется скрывать полностью.

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

Ошибка 1: Товары не исключаются

  • Неверный slug атрибута или термин. Проверьте точное имя таксономии (должно быть pa_имя_атрибута).
  • Термин атрибута отсутствует или неправильно указан в массиве 'terms'.
  • Код добавлен не в правильное место или не активирован.

Ошибка 2: Исключены все товары

  • Неправильный оператор в tax_query. Для исключения должен быть 'NOT IN', а не 'IN'.
  • Массив tax_query перезаписывается, а не дополняется — используйте array_merge или приводите к массиву, как в примере выше.

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

  • Проверяйте, что фильтр woocommerce_product_query не добавляет избыточных таксономических запросов, чтобы не ухудшать скорость загрузки.
  • Для сайтов с большим количеством товаров и сложными атрибутами рассмотрите кэширование запросов на уровне объекта или плагина кеширования.
  • Не используйте жёстко заданные термины, если они могут измениться — лучше хранить их в настройках или опциях.

Сравнение способов исключения товаров по атрибуту

МетодПлюсыМинусыРекомендации
Код в functions.php (через woocommerce_product_query)Гибко, быстро, не требует сторонних плагиновТребует базовых навыков PHP, может конфликтовать с другими плагинамиЛучше использовать в дочерней теме или кастомном плагине
Плагин для управления видимостью товаровУдобный интерфейс, дополнительные возможностиНагрузка на сайт, зависит от обновлений плагинаПодходит для пользователей без навыков программирования
Изменение статуса публикации товараПолностью скрывает товарНе подходит, если товар нужен для отчетности или повторного включенияИспользовать, если товар окончательно не продается
Как использовать хук woocommerce_order_status_changed для автоматизации задач в WooCommerce
29.05.2026
WooCommerce: как избежать проблем с кэшированием при использовании сниппетов
08.06.2026
WooCommerce: как исправить невозможность отмены заказа после оплаты
15.06.2026
WooCommerce: как исключить товары по атрибуту из поиска и фильтров
19.06.2026
Отключение автоматического возврата средств в WooCommerce и настройка возврата с подтверждением
30.06.2026