WooCommerce: исключение товаров из определённых категорий из поиска

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

В стандартной установке WooCommerce поиск на сайте выводит все товары, включая те, которые могут быть неактуальны, устаревшие или предназначены только для внутреннего использования. Это снижает удобство для пользователей и может ухудшить конверсию. Часто возникает задача — исключить из результатов поиска товары из конкретных категорий, например, "Скрытые", "Архив" или "Товары для оптовиков".

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

Как исключить товары из определённых категорий из поиска на WooCommerce: пошаговое решение

1. Подготовка: определяем ID или слаг категорий для исключения

Для начала нужно узнать слаги категорий, товары из которых нужно исключить. Это можно сделать в админке WordPress в разделе Товары > Категории. Например, категории hidden и archive.

2. Добавляем фильтр для модификации запроса поиска WooCommerce

Чтобы исключить товары из определённых категорий, нужно изменить запрос WP_Query, который используется для поиска. Это делается через хук pre_get_posts.

function wpinfo_exclude_categories_from_search( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
        // Категории для исключения из поиска
        $excluded_cats = array( 'hidden', 'archive' );

        // Получаем ID категорий по слагам
        $excluded_cat_ids = array();
        foreach ( $excluded_cats as $slug ) {
            $term = get_term_by( 'slug', $slug, 'product_cat' );
            if ( $term ) {
                $excluded_cat_ids[] = $term->term_id;
            }
        }

        if ( ! empty( $excluded_cat_ids ) ) {
            $tax_query = (array) $query->get('tax_query');
            $tax_query[] = array(
                'taxonomy' => 'product_cat',
                'field'    => 'term_id',
                'terms'    => $excluded_cat_ids,
                'operator' => 'NOT IN',
            );
            $query->set( 'tax_query', $tax_query );
        }

        // Убедимся, что поиск идет только по товарам
        $query->set( 'post_type', 'product' );
    }
}
add_action( 'pre_get_posts', 'wpinfo_exclude_categories_from_search' );

3. Добавляем код в functions.php вашей темы или в кастомный плагин

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

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

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

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

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

  • Код не работает — товары из исключённых категорий всё равно появляются в поиске. Проверьте, что функция подключена, и что поиск действительно использует основной запрос (is_main_query()). Если используется кастомный поиск, нужно адаптировать код под него.
  • Исключаются не те категории. Проверьте правильность слагов категорий и их наличие в таксономии product_cat.
  • Конфликт с другими плагинами, изменяющими поиск. Попробуйте временно отключить другие плагины, влияющие на поиск, чтобы проверить совместимость.

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

  • Функция не должна вызывать дополнительных тяжелых запросов — вызов get_term_by кэширует данные, но если категорий много, лучше один раз получить ID и сохранить их в опции или transient.
  • Не используйте query_posts, а именно pre_get_posts для изменения главного запроса.
  • Проверяйте, что изменения не ломают пагинацию и сортировку в результатах поиска.

Сравнение вариантов реализации

МетодПлюсыМинусы
Фильтр pre_get_postsГибко, без дополнительных плагинов, точечное изменениеТребует базовых знаний PHP, может конфликтовать с плагинами поиска
Плагин для кастомизации поиска (например, SearchWP)Простота настройки, расширенные возможностиПлатно, влияет на производительность
Добавление метаполей и фильтров в UIУдобно для пользователяСложно реализовать без плагинов, требует доработки
Как изменить URL авторского архива в WordPress
01.12.2025
WordPress авторизация без пароля: настройка и применение
05.12.2025
Как изменить имя пользователя в WordPress без доступа к базе данных
26.03.2026
Как изменить сообщение об ошибке при входе в WordPress
21.02.2026
Как изменить выборку постов в WordPress по методам запроса WP_Query
02.04.2026