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

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

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

Как WooCommerce формирует выборки товаров для поиска и категорий

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

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

  1. Определите ID товаров, которые нужно скрыть. Это можно сделать вручную или динамически (например, меткой «скрыть»).
  2. Добавьте следующий код в functions.php вашей темы или в кастомный плагин:
function wpma_exclude_products_from_search_and_cats( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    // ID товаров для исключения
    $exclude_ids = array( 123, 456 ); // замените на нужные ID

    // Исключаем из поиска по товарам
    if ( $query->is_search() && $query->get('post_type') === 'product' ) {
        $query->set('post__not_in', $exclude_ids);
    }

    // Исключаем из архивов категорий товаров
    if ( is_tax('product_cat') ) {
        $post__not_in = $query->get('post__not_in');
        if ( ! is_array( $post__not_in ) ) {
            $post__not_in = array();
        }
        $post__not_in = array_merge( $post__not_in, $exclude_ids );
        $query->set('post__not_in', $post__not_in);
    }
}
add_action( 'pre_get_posts', 'wpma_exclude_products_from_search_and_cats' );
  1. Очистите кэш сайта (если используется) и обновите пермалинки (в админке «Настройки» → «Постоянные ссылки» без изменений → «Сохранить изменения»).

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

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

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

  • Товары не скрываются: проверьте, действительно ли указан правильный ID товара. Для проверки используйте var_dump($exclude_ids) или выведите ID через error_log().
  • Появляется ошибка 404 на странице товара: возможно, товар отключён или удалён. Убедитесь, что статус товара установлен как «Опубликовано».
  • Исключение не работает в админке: код исключает только фронтенд-запросы. Это нормальное поведение.
  • Нарушается пагинация: если вы меняете параметры запроса, убедитесь, что пагинация корректно обрабатывается. Обычно данный код пагинацию не ломает.

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

  • Храните список ID товаров для исключения в отдельной опции или transient, если он большой и формируется динамически, чтобы не нагружать каждый запрос.
  • Если необходимо часто менять список исключённых товаров, реализуйте административный интерфейс для удобства управления.
  • Избегайте отключения товаров через статус «Черновик» для этих целей, чтобы сохранить возможность прямого доступа.
  • В случае большого каталога рассмотрите вариант исключения через SQL-запросы с фильтрацией, но будьте осторожны с производительностью.

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

МетодОписаниеПлюсыМинусы
Хук pre_get_postsФильтрация WP_Query во фронтендеГибкий, без плагинов, легко корректируетсяТребуется код, может быть сложным для новичков
Плагин скрытия товаровИспользование сторонних плагиновПростота установки, интерфейсЗависимость от стороннего кода, нагрузка
Изменение статуса товараУстановка статуса как «Черновик» или «В архиве»Простое решениеТовар недоступен по прямой ссылке
WooCommerce: как исключить определённые товары из поиска и категорий
10.07.2026
Автоматическое отключение способов оплаты при неподтверждённых заказах в WooCommerce
19.05.2026
Как создать собственный shortcode в WordPress
19.11.2025
Как автоматически удалять неиспользуемые категории в WordPress
03.04.2026
WooCommerce: как автоматически удалять неподтверждённые заказы
07.06.2026