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

Почему автоматическое создание купонов полезно в WooCommerce

Автоматическая генерация купонов при заказе помогает стимулировать повторные покупки и повышает лояльность клиентов. Вместо ручного создания скидок можно настроить систему, которая сама выдаст купон с уникальным кодом после успешного оформления заказа.

Диагностика задачи: когда и как создавать купоны автоматически

Чаще всего нужно создать купон после:

  • завершения оплаты заказа;
  • достижения определённой суммы заказа;
  • покупки определённого товара или категории;
  • выполнения других бизнес-условий.

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

Пошаговое решение: реализация автоматического создания купонов через код

1. Подключение к хуку смены статуса заказа

Для начала нужно использовать хук woocommerce_order_status_completed, чтобы отследить момент завершения заказа:

add_action('woocommerce_order_status_completed', 'create_discount_coupon_for_order');

2. Функция создания купона

Внутри функции создаём купон с уникальным кодом и параметрами скидки:

function create_discount_coupon_for_order($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);
    
    // Уникальный код купона: COUPON-номер_заказа-метка времени
    $coupon_code = 'COUPON-' . $order_id . '-' . time();
    
    // Проверяем, не создавался ли уже купон для этого заказа
    if (get_post_meta($order_id, '_generated_coupon', true)) return;

    $amount = '10'; // Размер скидки в процентах
    $discount_type = 'percent'; // Тип скидки: percent, fixed_cart, fixed_product

    $coupon = array(
        'post_title'   => $coupon_code,
        'post_content' => '',
        'post_status'  => 'publish',
        'post_author'  => 1,
        'post_type'    => 'shop_coupon'
    );

    $new_coupon_id = wp_insert_post($coupon);

    // Настраиваем параметры купона
    update_post_meta($new_coupon_id, 'discount_type', $discount_type);
    update_post_meta($new_coupon_id, 'coupon_amount', $amount);
    update_post_meta($new_coupon_id, 'individual_use', 'yes');
    update_post_meta($new_coupon_id, 'usage_limit', '1');
    update_post_meta($new_coupon_id, 'expiry_date', date('Y-m-d', strtotime('+30 days')));
    update_post_meta($new_coupon_id, 'apply_before_tax', 'yes');
    update_post_meta($new_coupon_id, 'free_shipping', 'no');

    // Связываем купон с заказом, чтобы не создавать несколько
    update_post_meta($order_id, '_generated_coupon', $coupon_code);

    // Отправляем купон на email покупателю
    $to = $order->get_billing_email();
    $subject = 'Ваш персональный купон на следующую покупку';
    $message = "Спасибо за заказ! Ваш купон на скидку: $coupon_code. Срок действия 30 дней.";
    wp_mail($to, $subject, $message);
}

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

  • Оформите тестовый заказ и установите статус «Завершён» вручную, если оплата в тестовом режиме не срабатывает.
  • Проверьте, создался ли купон в разделе WooCommerce » Купоны.
  • Убедитесь, что купон содержит правильные параметры (размер скидки, срок действия).
  • Проверьте, получил ли покупатель email с купоном.
  • Попробуйте применить купон при следующей покупке, чтобы проверить корректность скидки.

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

  • Купон создаётся несколько раз для одного заказа
    Причина: отсутствие проверки в метаданных заказа. Решение: использовать мета-поле, например _generated_coupon, чтобы избежать дублирования.
  • Письмо с купоном не отправляется
    Причина: проблемы с настройкой почты на сервере.
    Решение: проверить работу wp_mail() или настроить SMTP-плагин.
  • Купон не активен или не применяет скидку
    Причина: неправильные параметры купона (например, неверный тип скидки или дата истечения).
    Решение: убедиться в корректности discount_type, coupon_amount и формата даты.
  • Сбой при создании купона из-за отсутствия прав
    Причина: пользователь, под которым выполняется код, не имеет прав на создание купонов.
    Решение: убедиться, что код запускается от имени администратора или нужной роли.

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

  • Не создавайте купон при каждом изменении статуса, а только при переходе в «завершён».
  • Ограничьте использование купонов индивидуальным применением (individual_use).
  • Храните уникальный код купона в мета-поле заказа, чтобы избежать повторных генераций.
  • Для больших магазинов рассмотрите создание купонов с ограничением по времени и количеству использования.
  • Для рассылки email используйте SMTP-сервисы для надежной доставки.

Альтернативы: плагин vs код

МетодПлюсыМинусы
Код на PHPГибкость, контроль, нет лишних плагиновТребует навыков, поддержка и обновления — на вас
Плагины автоматизации купонов (например, Advanced Coupons)Простота, готовые настройки, поддержкаНагрузка на сайт, возможные конфликты, плата за премиум
WooCommerce: автоматическое удаление неактивных заказов по расписанию
26.06.2026
Как создать автоматическое отображение отзывов в WordPress
17.12.2025
WooCommerce: как автоматически изменять ставку НДС по типам товаров
12.07.2026
WooCommerce: автоматическое удаление неактивных заказов
29.05.2026
WooCommerce: как автоматически отключать товары после завершения продаж
15.06.2026