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

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

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

Диагностика задачи

Перед реализацией важно понять, что именно нам нужно:

  • Создавать уникальный купон для каждого покупателя;
  • Настраивать параметры купона: размер скидки, срок действия, ограничения;
  • Отправлять клиенту email с информацией о купоне;
  • Избежать дублирования и ошибок в генерации купонов;
  • Не снижать производительность магазина.

Пошаговое решение: реализация через хук WooCommerce

1. Создаём функцию генерации уникального купона

function wpone_generate_unique_coupon_code() {
    $prefix = 'WPONE';
    $unique = strtoupper( wp_generate_password( 8, false, false ) );
    return $prefix . '-' . $unique;
}

Функция генерирует строку с префиксом и случайным набором букв/цифр.

2. Создаём купон программно

function wpone_create_coupon_for_customer( $order_id ) {
    if ( ! $order_id ) return;

    $order = wc_get_order( $order_id );
    $user_id = $order->get_user_id();

    // Генерируем уникальный код
    $coupon_code = wpone_generate_unique_coupon_code();

    // Параметры купона
    $amount = '10'; // Скидка 10%
    $discount_type = 'percent'; // Тип скидки
    $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( $expiry_date );
    $coupon->set_individual_use( true );
    $coupon->set_usage_limit( 1 );
    $coupon->set_usage_limit_per_user( 1 );
    $coupon->set_description( 'Автоматический купон для пользователя ID ' . $user_id );
    $coupon->save();

    // Отправляем email с купоном
    wpone_send_coupon_email( $order, $coupon_code, $expiry_date );
}
add_action( 'woocommerce_thankyou', 'wpone_create_coupon_for_customer' );

3. Отправка email с купоном

function wpone_send_coupon_email( $order, $coupon_code, $expiry_date ) {
    $to = $order->get_billing_email();
    $subject = 'Ваш купон на скидку от нашего магазина';
    $message = "Здравствуйте!\n\nСпасибо за покупку. В качестве бонуса мы дарим вам купон на 10% скидку для следующего заказа.";
    $message .= "\n\nКод купона: " . $coupon_code;
    $message .= "\nСрок действия: " . $expiry_date;
    $message .= "\n\nИспользуйте его при оформлении следующего заказа.";

    wp_mail( $to, $subject, $message );
}

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

  • Оформите тестовый заказ под обычным пользователем;
  • После успешного завершения заказа проверьте, появился ли новый купон в разделе WooCommerce > Купоны;
  • Проверьте email покупателя — должен прийти письмо с кодом купона и сроком действия;
  • Попробуйте применить купон на следующий заказ — должна сработать скидка 10%.

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

  • Купон не создаётся: проверьте, что функция привязана к хуку woocommerce_thankyou, и что в параметре $order_id передаётся корректный ID заказа.
  • Дубли купонов: убедитесь, что функция генерации кода действительно создаёт уникальные коды, можно добавить проверку существования купона с таким кодом в базе.
  • Письма не отправляются: проверьте настройки SMTP сервера или используйте плагин для корректной отправки почты (например, WP Mail SMTP).
  • Скидка не применяется: проверьте настройки купона в админке, особенно ограничения по использованию и срок действия.

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

  • Уникальность кода купона проверяйте через wc_get_coupon_id_by_code(), чтобы избежать конфликтов.
  • Ограничьте срок действия купонов, чтобы не создавать «вечные» скидки.
  • Используйте индивидуальное использование купона, чтобы он не совмещался с другими скидками.
  • В целях безопасности не добавляйте в код купона личные данные пользователей.
  • Для повышения производительности не вызывайте тяжелые операции при генерации купона, сохраняйте минимум данных.

Сравнение подходов: плагин vs код

ПодходПлюсыМинусы
Плагин (например, AutomateWoo, Advanced Coupons)Быстрая настройка, готовый функционал, поддержкаСтоимость, возможные конфликты, нагрузка на сайт
Самописный код (как в статье)Полный контроль, лёгкость, отсутствие лишнего кодаТребует навыков программирования, поддержка на вас
Как избежать конфликтов между плагинами в WordPress
13.02.2026
Как использовать хуки в WordPress: практические примеры и советы
23.11.2025
Как отладить проблемы со скрытым кодом в WordPress
09.12.2025
Как удалить бесполезные CSS и JS в WordPress для ускорения сайта
22.02.2026
Как использовать Transients в WordPress для кэширования данных
27.11.2025