Включение поддержки купонов
Если поле ввода купона отсутствует, необходимо включить поддержку купонов. Откройте:- WooCommerce → Настройки → Основные.
- Включите пункт Использовать купоны.
Создание купона
В административной панели перейдите: Маркетинг → Купоны → Добавить купон Основные параметры:- код купона;
- тип скидки;
- размер скидки;
- дата окончания;
- минимальная сумма заказа;
- максимальная сумма заказа;
- ограничения по товарам;
- ограничения по категориям.
Класс WC_Coupon
Практически вся работа с купонами выполняется через класс:$coupon = new WC_Coupon('SALE10');
Получение объекта купона
$coupon = new WC_Coupon('SUMMER2026');
Получение ID купона
echo $coupon->get_id();
Получение названия
echo $coupon->get_code();
Размер скидки
echo $coupon->get_amount();
Тип скидки
echo $coupon->get_discount_type();
Возможные значения:
- percent
- fixed_cart
- fixed_product
Автоматическое применение купона
Добавим купон при открытии корзины.add_action( 'woocommerce_before_cart', function(){ $coupon='SALE10'; if( !WC()->cart->has_discount($coupon) ){ WC()->cart->apply_coupon($coupon); } });
Проверка применения
if( WC()->cart->has_discount('SALE10') ){ echo 'Купон уже активен'; }
Удаление купона
WC()->cart->remove_coupon('SALE10');
Удаление всех купонов
foreach( WC()->cart->get_applied_coupons() as $coupon){ WC()->cart->remove_coupon($coupon); }
Получение списка примененных купонов
$coupons= WC()->cart->get_applied_coupons(); print_r($coupons);
Создание купона программно
$coupon = new WC_Coupon(); $coupon->set_code('WELCOME'); $coupon->set_discount_type('percent'); $coupon->set_amount(10); $coupon->save();
Создание купона с фиксированной скидкой
$coupon = new WC_Coupon(); $coupon->set_code('SALE500'); $coupon->set_discount_type('fixed_cart'); $coupon->set_amount(500); $coupon->save();
Установка срока действия
$coupon->set_date_expires( new WC_DateTime( '2026-12-31' ) );
Минимальная сумма заказа
$coupon->set_minimum_amount(3000);
Максимальная сумма заказа
$coupon->set_maximum_amount(15000);
Запрет совместного использования
$coupon->set_individual_use(true);
Бесплатная доставка
$coupon->set_free_shipping(true);
Ограничение количества использований
$coupon->set_usage_limit(100);
Количество использований одним пользователем
$coupon->set_usage_limit_per_user(1);
Проверка существования купона
$coupon = new WC_Coupon('SALE10'); if($coupon->get_id()){ echo 'Купон найден'; }
Проверка срока действия
if( $coupon->get_date_expires() ){ echo 'Купон имеет срок действия'; }
Добавление купона только для авторизованных пользователей
if( is_user_logged_in() ){ WC()->cart->apply_coupon( 'VIP' ); }
Автоматический купон при сумме заказа
add_action( 'woocommerce_before_cart', function(){ if( WC()->cart->subtotal>10000 ){ WC()->cart->apply_coupon( 'BIGSALE' ); } });
Удаление купона при уменьшении суммы
if( WC()->cart->subtotal<10000 ){ WC()->cart->remove_coupon( 'BIGSALE' ); }
Проверка купона через фильтр
add_filter( 'woocommerce_coupon_is_valid', function($valid,$coupon){ if( date('N')==7 ){ return false; } return $valid; }, 10, 2 );
В данном примере купоны запрещены по воскресеньям.
Собственное сообщение об ошибке
add_filter( 'woocommerce_coupon_error', function($message){ return 'Данный купон сейчас недоступен.'; });
Проверка категории товара
if( has_term( 'sale', 'product_cat', $product_id ) ){ // логика }
Генерация случайного купона
$code='SALE-'. wp_generate_password( 8, false ); echo $code;
Получение скидки купона
echo WC()->cart->get_coupon_discount_amount( 'SALE10' );
Практические примеры
Купон для новых клиентов
if( get_current_user_id()==0 ){ WC()->cart->apply_coupon( 'NEWCLIENT' ); }
Купон в день рождения
if( date('m-d')=='05-15' ){ WC()->cart->apply_coupon( 'BIRTHDAY' ); }
Удаление купона после оформления
add_action( 'woocommerce_thankyou', function(){ foreach( WC()->cart->get_applied_coupons() as $coupon){ WC()->cart->remove_coupon($coupon); } });
Частые ошибки
Купон не применяется
- проверьте код купона;
- убедитесь, что он опубликован;
- проверьте срок действия;
- проверьте ограничения по товарам и категориям.
Автоматическое применение не работает
Используйте хуки после инициализации корзины, напримерwoocommerce_before_cart или woocommerce_before_checkout_form.
Купон применяется несколько раз
Перед применением всегда проверяйте:WC()->cart->has_discount();
Итог
- Используйте класс
WC_Couponвместо прямой работы с базой данных. - Всегда проверяйте существование купона перед использованием.
- Не применяйте купоны повторно — используйте
has_discount(). - Ограничивайте срок действия и количество использований.
- Используйте автоматические купоны только при выполнении условий акции.
- Проверяйте совместимость нескольких купонов.
- Размещайте пользовательский код в дочерней теме или отдельном плагине.
WC_Coupon, методов объекта корзины и многочисленных хуков можно создавать купоны программно, автоматически применять их, ограничивать использование, проверять условия и изменять стандартную логику работы. Грамотное использование купонов помогает увеличить средний чек, повысить лояльность покупателей и автоматизировать проведение рекламных кампаний, сохраняя при этом полный контроль над процессом оформления заказа.
Метки: WooCommerce, WordPress, Купоны


