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

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

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

Как автоматически создавать купоны в WooCommerce после успешной оплаты

Основные шаги

  1. Отслеживаем событие успешной оплаты заказа.
  2. Генерируем уникальный код купона.
  3. Создаём купон с заданными параметрами (скидка, срок действия и пр.).
  4. Отправляем покупателю уведомление с купоном (через email или личный кабинет).

Реализация на PHP через хуки WooCommerce

Используем хук woocommerce_order_status_completed, срабатывающий при смене статуса заказа на "завершён" (успешная оплата).

add_action('woocommerce_order_status_completed', 'create_coupon_after_purchase', 10, 1);
function create_coupon_after_purchase($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($expiry_date);
    $coupon->set_usage_limit(1);
    $coupon->set_description('Автоматически сгенерированный купон за покупку #' . $order_id);
    $coupon_id = $coupon->save();

    if (!$coupon_id) return;

    // Отправка купона клиенту по email
    $to = $order->get_billing_email();
    $subject = 'Ваш персональный купон со скидкой';
    $message = "Спасибо за покупку! Используйте купон <strong>{$coupon_code}</strong> для скидки 10 единиц на следующую покупку. Срок действия купона: {$expiry_date}.";
    $headers = array('Content-Type: text/html; charset=UTF-8');

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

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

  • Совершите тестовый заказ с успешной оплатой.
  • Перейдите в админку WooCommerce в раздел "Купоны" — должен появиться новый купон с кодом, начинающимся на "DISCOUNT-".
  • Проверьте почтовый ящик покупателя — должно прийти письмо с кодом купона и инструкцией.
  • Протестируйте купон на следующей покупке: он должен применяться и давать скидку.

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

  • Купон не создаётся: проверьте, что функция wc_get_order возвращает объект заказа, и что хук woocommerce_order_status_completed срабатывает. Для отладки вставьте error_log в функцию.
  • Письмо не отправляется: убедитесь, что почтовый сервер настроен корректно и функция wp_mail работает. Можно временно заменить отправку письма на запись в лог для проверки.
  • Купон не работает при оплате: проверьте настройки купона (тип и ограничения). Например, при фиксированной скидке убедитесь, что валюта совпадает с валютой магазина.
  • Дублирование купонов: если нужна уникальность на пользователя, можно сохранять купон в мета данных пользователя и не создавать новые при повторных покупках.

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

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

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

ВариантОписаниеПлюсыМинусы
Код в functions.phpСамописное решение на хуках WooCommerceГибкость, контроль, отсутствие плагиновНужно поддерживать код, требует знаний
Плагин автоматизации купоновГотовые решения из репозитория WordPressПростота установки, настройка через интерфейсОграниченная кастомизация, нагрузка на сайт
Комбинация с email-плагиномИнтеграция с плагином рассылкиБолее продвинутые шаблоны писемСложнее в настройке, может требовать платных дополнений
WooCommerce: как автоматически удалять старые заказы по расписанию без плагинов
16.06.2026
WooCommerce: автоматическое изменение стоимости товаров по расписанию
27.05.2026
Как удалить кэш в WordPress: практическое руководство
30.03.2026
Как добавить динамический контент в блоки Gutenberg в WordPress
04.03.2026
Как создать динамическую регистрацию пользователей в WordPress с проверкой и защитой
23.03.2026