WooCommerce: автоматическое создание купонов при заказах

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

В интернет-магазинах на WooCommerce часто возникает необходимость поощрять покупателей скидками на следующие заказы. Ручное создание купонов занимает время и не масштабируется. Автоматическое создание купонов с уникальными кодами и индивидуальными параметрами решает эту задачу.

Основные требования к автоматизации:

  • Создавать купон сразу после завершения заказа;
  • Генерировать уникальный код купона;
  • Настраивать параметры: сумму скидки, срок действия, применимость;
  • Отправлять купон клиенту по email.

Как реализовать автоматическое создание купона после заказа

Подключение к хуку завершения заказа

В WooCommerce есть хук woocommerce_order_status_completed, который срабатывает, когда заказ помечается как "завершённый". Используем его для создания купона.

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

add_action('woocommerce_order_status_completed', 'create_coupon_after_order', 10, 1);
function create_coupon_after_order($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);
    if (!$order) return;

    // Генерация уникального кода купона
    $coupon_code = 'DISCOUNT-' . strtoupper(wp_generate_password(8, false));

    // Параметры купона
    $amount = '10'; // скидка 10 единиц
    $discount_type = 'fixed_cart'; // фиксированная скидка на корзину
    $expiry_date = date('Y-m-d', strtotime('+30 days'));

    // Создаём объект купона
    $coupon = new WC_Coupon();
    $coupon->set_code($coupon_code);
    $coupon->set_amount($amount);
    $coupon->set_discount_type($discount_type);
    $coupon->set_date_expires(strtotime($expiry_date));
    $coupon->set_description('Автоматически созданный купон для клиента');
    $coupon->set_usage_limit(1); // ограничение на 1 использование
    $coupon->set_individual_use(true); // не комбинируется с другими купонами

    // Ограничение по пользователю
    $user_id = $order->get_user_id();
    if ($user_id) {
        $coupon->set_email_restrictions(array($order->get_billing_email()));
    }

    $coupon->save();

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

Проверка результата

1. Создайте тестовый заказ и переведите его в статус "Завершён" через админку WooCommerce.

2. Проверьте таблицу купонов в админке WooCommerce — должен появиться новый купон с уникальным кодом.

3. Проверьте почту, указанную в заказе — должен прийти email с кодом купона и сроком действия.

4. Попробуйте применить купон на следующий заказ — скидка должна сработать.

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

  • Купон не создаётся: проверьте, что функция подключена правильно, и используется хук woocommerce_order_status_completed. Убедитесь, что в заказе есть email покупателя.
  • Купон не применяется: проверьте настройки купона — особенно ограничения по email и тип скидки. Убедитесь, что купон не истёк.
  • Письмо не отправляется: проверьте настройку почты WordPress (wp_mail). Для отладки используйте плагины типа WP Mail Logging.
  • Код купона не уникален: используйте функцию wp_generate_password с параметрами, как в примере, чтобы минимизировать коллизии.

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

  • Ограничивайте использование купонов одной покупкой, чтобы избежать злоупотреблений.
  • Храните купоны только с минимально необходимыми правами доступа, избегайте хранения чувствительных данных.
  • Используйте SMTP-плагины для надежной отправки почты.
  • Оптимизируйте код, избегая излишних запросов к базе данных внутри хука.

Сравнение вариантов автоматического создания купонов

ВариантПлюсыМинусыКомпромисс
Ручное созданиеПростотаРучной труд, нет автоматизацииПодходит для небольших магазинов
Код через хук (как в статье)Гибкость, уникальные настройкиТребует навыков разработкиЛучше для магазинов с разработчиком
Плагин для купоновПростота внедренияМожет быть избыточным, нагрузкаПодходит для пользователей без кода
Как использовать AJAX в WordPress для обновления контента без перезагрузки
23.12.2025
WooCommerce: автоматическое удаление заказов с отсрочкой платежа
28.05.2026
WooCommerce: автоматическое создание купонов при заказах
27.04.2026
Как удалить старые версии плагинов в WordPress и освободить место
07.02.2026
Как удалить все записи пользователя в WordPress
26.11.2025