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

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

В стандартном WooCommerce поиск и фильтры выводят все опубликованные товары и категории. Но бывают задачи, когда нужно скрыть определённые товары или целые категории из результатов поиска и фильтрации, например:

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

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

Как проверить текущий результат поиска и фильтров

Перед внесением изменений важно понять, какие товары и категории видны в поиске и фильтрах:

  • Воспользуйтесь стандартным поиском WooCommerce на сайте, вводя ключевые слова по товарам, которые хотите скрыть.
  • Проверьте видимость категорий в виджетах фильтров или блоках с категориями.
  • Для более углублённого анализа можно использовать SQL-запросы к базе данных, например, проверить наличие товаров с нужными категориями и статусами.

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

1. Отключение товаров из поиска и фильтров по категориям

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

function exclude_products_by_category_from_search_and_filters( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    if ( $query->is_search() || is_post_type_archive( 'product' ) || is_tax( 'product_cat' ) ) {
        $tax_query = (array) $query->get( 'tax_query' );

        $tax_query[] = array(
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => array( 'skrytye-tovary', 'neaktivnye' ), // укажите слаги категорий для исключения
            'operator' => 'NOT IN',
        );

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

Замените 'skrytye-tovary' и 'neaktivnye' на слаги категорий, которые хотите исключить.

2. Исключение отдельных товаров по ID из поиска и фильтрации

Если нужно скрыть конкретные товары, добавьте их ID в массив:

function exclude_products_by_id_from_search_and_filters( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    if ( $query->is_search() || is_post_type_archive( 'product' ) || is_tax( 'product_cat' ) ) {
        $post__not_in = (array) $query->get( 'post__not_in' );

        $post__not_in = array_merge( $post__not_in, array( 123, 456, 789 ) ); // ID товаров для исключения

        $query->set( 'post__not_in', $post__not_in );
    }
}
add_action( 'pre_get_posts', 'exclude_products_by_id_from_search_and_filters' );

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

  • Очистите кэш сайта и браузера, если используете кэширование.
  • Используйте поиск по ключевым словам, связанным с исключёнными товарами или категориями — они не должны отображаться.
  • Проверьте фильтры и категории в сайдбаре — исключённые категории должны отсутствовать или не показывать товары.
  • Если используете кастомные фильтры (плагины), убедитесь, что они учитывают параметры tax_query и post__not_in.

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

  • Код не работает в админке: убедитесь, что условие is_admin() корректно используется, чтобы не влиять на запросы в панели управления.
  • Исключённые товары всё равно видны: проверьте, нет ли конфликтов с другими плагинами, которые модифицируют запросы WooCommerce.
  • Категории отображаются в фильтрах, но без товаров: некоторые виджеты или плагины фильтров не учитывают tax_query — для них может потребоваться отдельная настройка или кастомизация.
  • Ошибка синтаксиса в коде: используйте IDE с подсветкой PHP или онлайн-валидаторы перед добавлением кода.

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

  • Добавляйте фильтры pre_get_posts максимально целенаправленно, чтобы не замедлять загрузку не относящихся страниц.
  • Для больших магазинов с тысячами товаров лучше использовать плагины с поддержкой индексации и поиска, например, ElasticPress, которые позволяют гибко настраивать исключения.
  • При массовом исключении товаров из выборки рассмотрите возможность использования пользовательских мета-полей и фильтрации по ним — это может быть эффективнее, чем таксономии.
  • Тестируйте изменения на тестовом сайте, чтобы не нарушить работу живого магазина.

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

МетодПлюсыМинусыКогда использовать
Через tax_query (исключение категорий)Легко реализовать, хорошо работает с таксономиямиНе подходит для исключения отдельных товаровКогда нужно скрыть целые категории
post__not_in (исключение товаров по ID)Точный контроль над товарамиНе масштабируется при большом количестве товаровКогда нужно скрыть несколько конкретных товаров
Плагины поиска и фильтрации (например, ElasticPress)Быстрая работа с большими базами, расширенные настройкиТребуют установки и настройки, могут быть платнымиКрупные магазины с высокой нагрузкой
Добавление поля телефона в регистрацию WordPress с подтверждением
07.04.2026
Как изменить URL автора в WordPress без изменения ссылок постов
05.12.2025
Как изменить размер изображений в WordPress без потери качества
26.01.2026
Как удалить ненужные виджеты в WordPress через функции темы
13.04.2026
Как автоматически удалять старые чёрные спам-комментарии в WordPress
04.04.2026