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

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

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

Проверить текущие настройки можно в админке WooCommerce: Маркетинг > Купоны или в используемых плагинах скидок. Если нет явных исключений, значит, нужно реализовать фильтр вручную.

Пошаговое решение: исключаем товары из скидок через хук WooCommerce

1. Идентифицируем товары для исключения

Определим по ID, категории или атрибуту, какие товары не должны получать скидку. Например, товары с ID 15, 22 и 35. В реальном проекте можно использовать категории, например "premium".

2. Используем фильтр woocommerce_coupon_is_valid_for_product

Этот фильтр позволяет управлять применимостью купона к конкретному товару.

add_filter('woocommerce_coupon_is_valid_for_product', 'exclude_products_from_discount', 10, 4);
function exclude_products_from_discount($valid, $product, $coupon, $values) {
    $excluded_ids = array(15, 22, 35); // ID товаров для исключения
    if (in_array($product->get_id(), $excluded_ids)) {
        return false; // Купон не применяется к этим товарам
    }
    return $valid;
}

3. Альтернатива: исключение по категории

add_filter('woocommerce_coupon_is_valid_for_product', 'exclude_category_from_discount', 10, 4);
function exclude_category_from_discount($valid, $product, $coupon, $values) {
    $excluded_cat = 'premium';
    if (has_term($excluded_cat, 'product_cat', $product->get_id())) {
        return false;
    }
    return $valid;
}

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

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

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

  • Купон применяется ко всем товарам, включая исключённые: Проверьте, что функция возвращает false именно для нужных товаров и подключена с правильным приоритетом (10). Иногда другие плагины могут перебивать фильтр.
  • Фильтр не срабатывает для автоматических скидок: Фильтр woocommerce_coupon_is_valid_for_product работает только для купонов, для других типов скидок нужен другой подход, например, woocommerce_cart_item_discount.
  • Ошибка в ID товаров или категории: Убедитесь, что ID и слаг категории указаны правильно, используйте функции get_the_terms() или has_term() для проверки.
  • Кэширование мешает проверке скидок: Отключите кэширование страниц и кэш WooCommerce при тестировании, чтобы видеть актуальные результаты.

Практические советы по оптимизации и безопасности

  • Храните список исключённых товаров в настройках темы или отдельной опции, чтобы не править код при изменениях.
  • Для больших магазинов с тысячами товаров лучше исключать категории, а не ID, чтобы код оставался простым и быстрым.
  • Тестируйте скидки на staging-сервере, чтобы избежать ошибок в рабочем магазине.
  • Используйте логи WooCommerce или добавляйте временный вывод (error_log()) для отладки фильтров.

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

МетодПлюсыМинусыПример кода
Исключение по ID товараПросто и явноТребует обновления кода при изменении товаровВ коде выше
Исключение по категорииГибко, легко масштабируетсяНужно правильно структурировать категорииВ коде выше
Плагины для управления скидкамиУдобный UI, много вариантовДополнительная нагрузка и стоимостьПлагины, например WooCommerce Dynamic Pricing
Как автоматически удалять неактивных пользователей в WordPress
07.04.2026
Как автоматизировать создание резервных копий в WordPress с помощью Clearfy Pro
18.01.2026
Как создать защищённые паролем страницы в WordPress
09.02.2026
WooCommerce: как принудительно потребовать авторизацию пользователя при оформлении заказа
20.05.2026
Как отключить автовключение видео в WordPress: практические решения и примеры
25.12.2025