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

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

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

Диагностика проблемы: почему стандарт WooCommerce не подходит

WooCommerce по умолчанию не поддерживает автоматическую генерацию купонов при оформлении заказа. Чтобы реализовать такую функциональность, необходимо писать кастомный код, который будет создавать купон и, возможно, отправлять его клиенту. Часто возникает вопрос, как сделать это корректно, не создавая мусор в базе и не нарушая логику магазина.

Шаги решения: как автоматически создавать купоны при заказе

1. Привязка к хуку создания заказа

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

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

Основная задача — создать новый объект купона с уникальным кодом, задать параметры скидки и сохранить его.

add_action('woocommerce_order_status_completed', 'generate_coupon_after_order', 10, 1);
function generate_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 ) );

    // Создаем новый купон как пост типа 'shop_coupon'
    $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);

    if (!$new_coupon_id) return;

    // Настраиваем параметры купона
    update_post_meta($new_coupon_id, 'discount_type', 'percent'); // процентная скидка
    update_post_meta($new_coupon_id, 'coupon_amount', '10'); // 10%
    update_post_meta($new_coupon_id, 'individual_use', 'yes');
    update_post_meta($new_coupon_id, 'usage_limit', '1');
    update_post_meta($new_coupon_id, 'usage_limit_per_user', '1');
    update_post_meta($new_coupon_id, 'date_expires', 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');

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

3. Отправка купона клиенту

В коде выше показано, как отправить письмо с купоном клиенту. Можно дополнительно настроить шаблон письма в зависимости от тематики магазина.

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

  • Перейдите в админку WooCommerce — раздел «Купоны» и найдите новый купон с префиксом DISCOUNT-.
  • Проверьте параметры купона, срок действия и ограничения.
  • Оформите тестовый заказ и проверьте, приходит ли письмо с купоном на email, указанный в заказе.
  • Попробуйте применить купон на другом заказе — скидка должна сработать.

Частые ошибки и способы их устранения

  • Купон не создаётся: проверьте, вызывается ли хук и нет ли ошибок PHP. Включите WP_DEBUG и посмотрите логи.
  • Письмо не отправляется: убедитесь, что настроена отправка почты на сервере, или используйте SMTP-плагин (например, WP Mail SMTP).
  • Купон не работает: проверьте, правильно ли заданы параметры купона, в частности тип скидки и ограничения.
  • Повторные купоны для одного пользователя: добавьте проверку, был ли уже создан купон для данного пользователя, чтобы не создавать дубликаты.

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

  • Ограничьте количество создаваемых купонов, чтобы не засорять базу данных. Например, создавайте купон только для пользователей с определённым статусом или суммой заказа.
  • Используйте nonce и проверку прав, если добавляете функционал в админку.
  • Оптимизируйте отправку писем через очереди, если у вас большой магазин.
  • Регулярно очищайте устаревшие купоны через WP Cron или вручную.

Сравнение способов реализации

МетодПлюсыМинусыПример
Код на хуке woocommerce_order_status_completed Гибкость, интеграция с логикой заказа Требует навыков программирования, риски ошибок Пример выше
Использование плагина автоматизации (например, AutomateWoo) Простота настройки, готовые шаблоны действий Дополнительные расходы, меньшая кастомизация Плагин AutomateWoo
Ручное создание купонов Простота, контроль Не автоматизировано, трудозатратно Админка WooCommerce
WooCommerce: как изменить название и URL вариации товара без плагинов
30.06.2026
Автоматическое изменение статуса заказа WooCommerce при оплате PayPal
07.05.2026
WooCommerce: автоматическое изменение цен и скидок при импорте продуктов
17.05.2026
Автоматический импорт статей из Яндекс.Дзен в WordPress с подтверждением публикации
15.04.2026
Как создать динамические отзывы в WordPress с помощью шорткодов
21.11.2025

Плагин службы технической поддержки для WordPress. Создание, просмотр и ответ на тикеты. Уведомление пользователей и другие функции.