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

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

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

Как исключить товары из корзины автоматически

Для удаления товаров из корзины по определённым условиям (например, по категории) используйте хук woocommerce_check_cart_items. Он срабатывает перед оформлением заказа и позволяет проверить содержимое корзины.

Пример кода для исключения товаров из категории excluded-category из корзины:

add_action('woocommerce_check_cart_items', function() {
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        $product_id = $cart_item['product_id'];
        if (has_term('excluded-category', 'product_cat', $product_id)) {
            WC()->cart->remove_cart_item($cart_item_key);
            wc_add_notice('Товар "' . get_the_title($product_id) . '" был удалён из корзины, так как не доступен для продажи.', 'error');
        }
    }
});

Как это работает

  • Проходим по всем товарам в корзине.
  • Проверяем, принадлежит ли товар к категории excluded-category.
  • Если да — удаляем товар из корзины и выводим уведомление.

Как исключить товары из результатов поиска WooCommerce

Для исключения товаров из поиска используйте фильтр pre_get_posts, чтобы модифицировать основной запрос WordPress на страницах поиска WooCommerce.

add_action('pre_get_posts', function($query) {
    if (!is_admin() && $query->is_main_query() && $query->is_search() && is_post_type_archive('product') || $query->get('post_type') === 'product') {
        $tax_query = (array) $query->get('tax_query');
        $tax_query[] = array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => array('excluded-category'),
            'operator' => 'NOT IN',
        );
        $query->set('tax_query', $tax_query);
    }
});

Пояснения к коду

  • Проверяем, что это фронтенд, основной запрос и поиск по товарам.
  • Добавляем условие исключения товаров из категории excluded-category из результатов поиска.

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

  1. Добавьте в корзину товар из категории excluded-category. При переходе к оформлению заказа товар должен автоматически удалиться с сообщением об ошибке.
  2. Выполните поиск по сайту по товарам из категории excluded-category. Они не должны отображаться в результатах поиска.

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

  • Код не срабатывает: Проверьте, что код добавлен в файл functions.php активной темы или в кастомный плагин, и что WooCommerce активен.
  • Уведомления не отображаются: Убедитесь, что тема поддерживает вывод уведомлений WooCommerce wc_print_notices() в шаблонах.
  • Поиск не фильтруется: Проверьте условия в pre_get_posts и корректность слага категории.

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

  • Используйте существующие таксономии и категории для исключения товаров, избегайте прямого сравнения ID для лучшей масштабируемости.
  • Не добавляйте тяжелые запросы или циклы в хук woocommerce_check_cart_items, чтобы не замедлять оформление заказа.
  • Проверяйте работу кода на тестовом сайте перед публикацией в продакшн.

Сравнение способов решения задачи

МетодПлюсыМинусыКогда использовать
Код в functions.phpЛегко кастомизировать, бесплатно, быстро работаетТребует навыков PHP, возможны ошибки при обновленияхНебольшие проекты, при отсутствии плагинов
Плагины (например, WooCommerce Catalog Mode)Простота настройки, дополнительные функцииМожет замедлять сайт, требует обновленияБольшие магазины с нестандартной логикой
Как добавить автопостинг в WordPress с помощью WPRemark
18.03.2026
Как создать собственный виджет для WordPress
14.11.2025
WooCommerce: как изменить стоимость товара при регистрации пользователя
03.05.2026
WooCommerce: как автоматически изменить стоимость товара при регистрации пользователя
07.07.2026
WooCommerce: как сделать автоматическое изменение стоимости товара при определённых условиях
08.05.2026