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

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

В интернет-магазинах на WooCommerce иногда требуется скрыть определённые товары из стандартного каталога и поиска, не удаляя их из базы. Например, товары с определённым атрибутом «Сезон» = «Архив», или с атрибутом «Статус» = «Снято с производства». Это помогает не показывать устаревшие позиции, но при этом сохранять их для отчетности или внутреннего учета.

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

Как работает исключение: фильтрация главного запроса WooCommerce

Для решения задачи нужно изменить параметры основного WP_Query на страницах каталога и поиска, чтобы исключить товары с заданными атрибутами. Атрибуты в WooCommerce — это таксономии с префиксом pa_. Например, атрибут «Сезон» с ярлыком season будет в таксономии pa_season.

Мы будем использовать хук pre_get_posts для изменения запроса до его выполнения.

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

add_action('pre_get_posts', function($query) {
    if (is_admin() || !$query->is_main_query()) {
        return;
    }

    // Проверяем, что это главная страница магазина, архив товаров или поиск
    if (is_shop() || is_product_taxonomy() || is_search()) {
        // Добавляем фильтрацию по таксономии атрибута
        $tax_query = $query->get('tax_query') ?: [];

        $tax_query[] = [
            'taxonomy' => 'pa_season', // замените на нужный атрибут
            'field'    => 'slug',
            'terms'    => ['archive'], // слаг значения атрибута для исключения
            'operator' => 'NOT IN',
        ];

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

В данном примере мы исключаем из каталога и поиска товары с атрибутом pa_season и значением archive.

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

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

Частые ошибки при реализации и их исправление

  • Неверное имя таксономии атрибута
    Атрибуты WooCommerce хранятся как таксономии с префиксом pa_. Проверяйте точный слаг атрибута в админке или базе.
  • Код срабатывает в админке
    Обязательно пропускайте запросы в админке с помощью is_admin(), иначе можно сломать функционал.
  • Неправильный оператор в tax_query
    Для исключения нужно использовать NOT IN, иначе товары будут фильтроваться наоборот.
  • Другие фильтры перекрывают запрос
    Если есть другие плагины или темы, которые меняют pre_get_posts, порядок срабатывания может влиять на результат. В этом случае можно добавить приоритет или более точную проверку.

Альтернативы: плагины и код

РешениеПлюсыМинусы
Код на pre_get_postsГибкость, отсутствие зависимости от плагинов, лёгкость кастомизацииТребует знаний PHP, при ошибках может влиять на запросы
Плагин «WooCommerce Product Filter» или аналогиПростота настройки, визуальные фильтры для пользователейМожет не исключать товары из поиска, нагрузка на сайт

Чек-лист для внедрения решения

  • Определите точный атрибут и значение для исключения (проверьте slug в админке или базе)
  • Добавьте код в файл functions.php дочерней темы или в кастомный плагин
  • Убедитесь, что код не срабатывает в админке (is_admin())
  • Проверьте работу на страницах магазина, архивах и поиске
  • Проверьте работу на кэшированных страницах (очистите кэш)
  • Протестируйте на мобильных устройствах и с разными ролями пользователей

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

  • Избегайте добавления слишком сложных tax_query с большим числом условий, это нагрузит базу.
  • Кэшируйте страницы магазина с помощью плагинов кеширования, чтобы уменьшить нагрузку от запросов.
  • Проверяйте совместимость с другими плагинами, которые могут менять запросы WooCommerce.
  • Используйте дочерние темы или собственные плагины для хранения кода, чтобы избежать потери при обновлениях.
Как установить автоматическое отображение отзывов в WordPress
03.04.2026
Как создать собственный шорткод в WordPress
10.11.2025
Как удалить или заблокировать регистрацию пользователей в WordPress
09.01.2026
Как автоматизировать удаление старых записей WordPress через шорткод
01.01.2026
Как автоматически удалять неактивных пользователей WordPress
07.02.2026