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

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

В стандартном поиске WooCommerce выводятся все товары, которые опубликованы. Однако, бывают ситуации, когда нужно скрыть определённые товары из результатов поиска, например, товары, находящиеся в черновиках, товары с определённой меткой, или товары для внутреннего использования. Без корректной фильтрации такие товары могут мешать клиентам, снижать релевантность и приводить к ошибкам.

Проверка текущего поведения поиска

Для начала убедитесь, что поиск WooCommerce действительно выдает товары, которые вы хотите исключить:

  • Выполните поиск по ключевому слову, связанному с товаром, который хотите скрыть.
  • Проверьте, отображается ли товар в результатах.
  • Обратите внимание на атрибуты и таксономии этого товара (статус, категория, тег, мета-поля).

Если товар отображается, значит требуется вмешательство в запрос.

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

Самый надёжный способ — использовать хук pre_get_posts для изменения параметров основного запроса WordPress на страницах поиска.

Пример кода для исключения товаров с определённым ID или мета-полем:

function exclude_products_from_search( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
        // Ограничиваем поисковый запрос только товарами WooCommerce
        $post_type = $query->get('post_type');
        if ( empty( $post_type ) || $post_type === 'product' || ( is_array( $post_type ) && in_array( 'product', $post_type ) ) ) {
            // Пример: исключить товары с ID 123 и 456
            $excluded_ids = array( 123, 456 );
            $query->set( 'post__not_in', $excluded_ids );

            // Или исключить по мета-ключу '_exclude_from_search' = 'yes'
            $meta_query = array(
                array(
                    'key'     => '_exclude_from_search',
                    'value'   => 'yes',
                    'compare' => '!='
                ),
            );

            $query->set( 'meta_query', $meta_query );
        }
    }
}
add_action( 'pre_get_posts', 'exclude_products_from_search' );

Обратите внимание, что в этом примере мы комбинируем исключение по ID и мета-полю. Вы можете использовать один из вариантов или оба.

Как добавить мета-поле к товару для управления исключением

Чтобы управлять исключением через админку, добавьте пользовательское поле _exclude_from_search со значением yes к нужным товарам. Можно сделать вручную через кастомные поля или использовать Advanced Custom Fields.

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

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

  1. Очистите кэш сайта и браузера.
  2. Откройте фронтенд и выполните поиск по ключевым словам, связанным с исключёнными товарами.
  3. Убедитесь, что товары не отображаются в результатах.
  4. Проверьте, что остальные товары видны как обычно.

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

  • Код не работает — товары не исключаются: Проверьте, что код добавлен в правильный файл и что он не конфликтует с другими плагинами или темой. Убедитесь, что условие is_search() срабатывает именно на странице поиска.
  • Исключение не срабатывает на пользовательских поисках или AJAX: В таких случаях дополнительно нужно фильтровать запросы в AJAX-хендлерах или кастомных шаблонах.
  • Неправильное использование post__not_in вместе с другими параметрами запроса: Если в запросе уже есть post__in или meta_query, объединяйте их аккуратно, чтобы избежать конфликтов.
  • Проблемы с производительностью при большом количестве исключений: Используйте мета-поля вместо списка ID, чтобы не перегружать запрос.

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

  • Используйте индексированные мета-поля для фильтрации, чтобы не замедлять запросы.
  • При большом количестве товаров лучше избегать post__not_in с длинными списками ID — используйте таксономии или мета-поля.
  • Регулярно проверяйте, не конфликтует ли ваш код с обновлениями WooCommerce и WordPress.
  • Для удобства администрирования создайте пользовательский UI (через ACF или кастомные мета-боксы) для установки мета-поля _exclude_from_search.

Сравнение методов исключения товаров из поиска WooCommerce

МетодПреимуществаНедостатки
Исключение по ID через post__not_inПросто реализуется, быстро работает при небольшом количестве IDПлохо масштабируется, неудобно поддерживать длинные списки
Исключение по мета-полю в meta_queryГибкость, легко управлять через админку, масштабируемостьМожет замедлять запросы без индексации мета-полей
Исключение через таксономии (категории, теги)Удобно группировать, легко изменятьТребует дополнительной настройки таксономий
Как создать динамические меню в WordPress: практические решения с кодом и плагинами
12.04.2026
Как создать динамические формы в WordPress с помощью плагинов и кода
04.03.2026
Как создать собственный шорткод в WordPress
05.11.2025
Автоматический бэкап WordPress: лучшие плагины и примеры кода
25.11.2025
Как удалить или изменить slug таксономии в WordPress
15.02.2026