WooCommerce

Не работает купон в WooCommerce: почему промокод не применяется и как исправить

Покупатель вводит промокод, нажимает «Применить», а WooCommerce отвечает, что купон недействителен, не даёт скидку или вообще ведёт себя так, будто кода не существует. Для магазина это не мелкая косметическая ошибка: неработающий купон ломает рекламную механику именно в момент, когда клиент уже готов купить.

Причина не всегда в самом купоне. В WooCommerce скидка проходит несколько проверок: срок действия, сумма корзины, товары и категории, email покупателя, лимиты использования, совместимость с другими купонами, состояние корзины и Checkout. В блочной корзине к этому добавляется Store API. Поэтому правильная диагностика начинается не с переустановки WooCommerce, а с определения этапа, на котором скидка перестала применяться.

Что проверить в первую очередь

Быстрая проверка. Создайте один контрольный заказ в приватном окне браузера. Добавьте обычный товар без скидки, введите купон вручную и зафиксируйте точный текст ошибки. Затем проверьте стоимость товаров до и после применения кода.

Если проблема возникает только с определённым товаром, покупателем или суммой корзины, сначала смотрите ограничения купона. Если любой купон перестал работать сразу после обновления, подключения кэша или нового плагина — вероятнее конфликт находится уже на уровне Checkout, JavaScript или Store API.

1. Проверьте срок действия и статус купона

Откройте Маркетинг → Купоны и найдите проблемный код. Убедитесь, что купон опубликован, срок его действия не закончился и размер скидки указан корректно.

Есть неочевидная деталь: WooCommerce считает купон недействительным уже в дату, указанную как дата окончания. Поэтому акция, которую мысленно планировали «включительно до этого дня», может закончиться раньше ожидаемого сценария.

2. Проверьте ограничения использования

Самая частая группа причин находится во вкладке Ограничения использования. WooCommerce позволяет задать минимальную и максимальную сумму, конкретные товары и категории, исключённые товары, запрет применения к акционным позициям и разрешённые email.

Если видите это — вероятнее всего… Купон работает с одним товаром, но не работает с другим — проверьте Products, Exclude products, Product categories и Exclude categories. Код срабатывает у администратора, но не у клиента — проверьте ограничения по email и условия, добавленные сторонними расширениями.

Особенно внимательно смотрите настройку Exclude sale items. Если товар уже продаётся со скидкой, такой купон к нему не применяется. Это штатная логика, а не ошибка WooCommerce.

3. Проверьте минимальную сумму корзины

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

Сделайте контроль: временно уберите минимальный порог у тестового купона и повторите заказ с тем же набором товаров. Если скидка появилась, проблема найдена — дальше нужно проверить именно условия акции, а не плагины магазина.

4. Проверьте лимиты купона

Во вкладке Лимиты использования можно ограничить общее количество применений, число товаров и количество использований одним покупателем. Когда лимит исчерпан, WooCommerce отклоняет код.

Здесь встречается более неприятный сценарий. В актуальном GitHub WooCommerce есть подтверждённая проблема с order-pay: купон с лимитом может быть отклонён как уже использованный из-за собственного временного удержания этого же заказа. Поэтому сообщение «лимит использования достигнут» после неудачной оплаты не всегда означает, что скидку действительно забрал другой клиент.

Если ошибка появилась именно после отказа платежа, сначала проверьте сам заказ, его примечания и историю использования купона. Не увеличивайте лимит наугад: так можно разрешить повторное использование акции реальным покупателям.

5. Купон применился, но скидка равна нулю

Это другой класс ошибки. Код может считаться применённым, но не иметь подходящих товаров для скидки. Проверьте тип купона: процентная скидка, фиксированная скидка корзины или фиксированная скидка товара. Затем сопоставьте его с ограничениями по товарам и категориям.

Купоны WooCommerce уменьшают стоимость товаров, а не стоимость доставки. Если акция должна давать бесплатную доставку, одной скидки на сумму товаров недостаточно: купон и соответствующий метод бесплатной доставки должны быть настроены согласованно.

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

6. Проверьте блочную корзину и Store API

Современные Cart и Checkout Blocks работают через WooCommerce Store API. Для купонов предусмотрены отдельные операции применения и удаления скидки. Поэтому ситуация «в админке купон нормальный, а на странице не применяется» может быть связана не с настройками акции, а с запросом браузера.

Откройте DevTools → Network, примените купон и найдите запрос к /wc/store/v1/cart/apply-coupon или связанный запрос корзины. Ответы 403, 429 и 500 уже переводят диагностику из маркетинговых настроек в техническую область.

Если одновременно не обновляется сама корзина или товары перестали нормально попадать в неё, сначала проверьте причины проблем с добавлением товара в корзину WooCommerce.

7. Посмотрите Console, если кнопка визуально ничего не делает

Если после нажатия «Применить» нет ни скидки, ни сообщения, откройте DevTools → Console. JavaScript-ошибка стороннего плагина, темы, минификации или кастомного скрипта способна оборвать обработку интерфейса раньше, чем покупатель увидит нормальную ошибку.

Не делайте так. Не отключайте хаотично плагины на рабочем магазине во время заказов. Сначала зафиксируйте ошибку, URL, время, запрос Network и Console. Эти данные резко сокращают поиск причины.

8. Очистите кэш правильно, а не «вообще весь»

После изменения купона старое состояние корзины может сохраняться в браузере, объектном кэше или оптимизирующем слое. Для проверки используйте приватное окно и новую корзину. Если проблема исчезла, исследуйте правила кэширования Cart и Checkout.

Но очистка кэша — диагностический тест, а не универсальное лекарство. Если ошибка воспроизводится в новой сессии, бессмысленно очищать всё по кругу: переходите к Store API, логам и конфликтам.

9. Проверьте сторонние плагины скидок и кастомный код

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

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

Полноценный conflict test проводите на staging: стандартная тема, WooCommerce и минимальный набор необходимых расширений. Возвращайте компоненты по одному. Универсальный принцип диагностики здесь простой: один тест — одна переменная.

10. Проверьте журналы, если появляется 500 или критическая ошибка

Если применение купона вызывает HTTP 500, белый экран или критическую ошибку, прекратите эксперименты с настройками скидки. Посмотрите WooCommerce Logs и PHP error log, зафиксировав время контрольного запроса.

При серверном 500 используйте отдельный алгоритм поиска причины ошибки 500 в WordPress. Если проблема началась после обновления расширения, полезна также инструкция о том, что делать при критической ошибке WordPress после обновления плагина.

Особый случай: купон ломается после неудачной оплаты

Это место, где корзина, купон и заказ уже нельзя рассматривать отдельно. WooCommerce должен учитывать лимиты использования и одновременно не разрешать одному коду применяться больше положенного. Такая защита создаёт сложное состояние между «купон зарезервирован заказом» и «купон окончательно использован».

В августе 2026 года в официальном GitHub WooCommerce зарегистрирован подтверждённый баг, при котором order-pay может посчитать собственное временное удержание купона и удалить легитимную скидку как исчерпавшую лимит. Поэтому после неудачной оплаты проверяйте заказ до изменения лимитов и удаления купона.

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

Коротко: что делать сейчас

  1. Повторите ошибку в новой приватной сессии.
  2. Проверьте срок действия, тип скидки и ограничения купона.
  3. Проверьте общий лимит и лимит на пользователя.
  4. Сравните работу купона на обычном товаре без акции.
  5. Для Cart/Checkout Blocks посмотрите Network и Store API.
  6. При визуальном зависании проверьте Console.
  7. При 500 или PHP-ошибке переходите к журналам.
  8. Конфликт плагинов ищите на staging, включая компоненты по одному.

FAQ

Почему WooCommerce пишет, что купон недействителен?

Чаще всего истёк срок действия, не выполнено ограничение по сумме, товару, категории или email либо достигнут лимит использования. Точный текст ошибки и настройки конкретного купона позволяют быстро сузить причину.

Почему купон применяется, но скидки нет?

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

Может ли кэш мешать работе купонов WooCommerce?

Да, особенно если кэшируется динамическое состояние Cart или Checkout. Проверка в новой приватной сессии помогает отделить старое состояние корзины от воспроизводимой серверной ошибки.

Почему после неудачной оплаты купон сообщает, что лимит исчерпан?

Сначала проверьте заказ и историю купона. Для сценариев с usage limit и order-pay существуют подтверждённые проблемы с временным удержанием купона, поэтому автоматически увеличивать лимит не стоит.

Можно ли отключать плагины для проверки на рабочем магазине?

Для магазина с реальными заказами безопаснее проводить полный conflict test на staging. На production сначала собирают Network, Console и логи, чтобы не создавать покупателям новую проблему во время диагностики.

Купон всё ещё не работает?

Если диагностика уже упирается в Store API, PHP-ошибки, платёжный шлюз, кастомные хуки или конфликт расширений, дальнейшие эксперименты на рабочем магазине могут затронуть корзины и реальные заказы. В такой ситуации разумнее остановить изменения и найти причину на основании логов и воспроизводимого теста.

Исправить купоны WooCommerce