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

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

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

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

Выбор события и подключение к нему

Для примера возьмём событие успешной регистрации нового пользователя. Используем хук user_register, который срабатывает после создания аккаунта.

add_action('user_register', 'create_coupon_for_new_user');

Функция создания купона с параметрами

В функции создадим купон с уникальным кодом, фиксированной скидкой 10% и сроком действия 7 дней.

function create_coupon_for_new_user($user_id) {
    if (!class_exists('WC_Coupon')) {
        return;
    }

    $user_info = get_userdata($user_id);
    if (!$user_info) {
        return;
    }

    // Генерируем уникальный код купона
    $coupon_code = 'WELCOME-' . strtoupper(wp_generate_password(6, false));

    // Проверяем, не существует ли уже такой купон
    if (post_exists($coupon_code, '', '', 'shop_coupon')) {
        return;
    }

    // Создаём объект купона
    $coupon = new WC_Coupon();
    $coupon->set_code($coupon_code);
    $coupon->set_discount_type('percent'); // процентная скидка
    $coupon->set_amount(10); // 10% скидка
    $coupon->set_individual_use(true); // нельзя комбинировать с другими купонами
    $coupon->set_usage_limit(1); // можно использовать только один раз
    $coupon->set_date_expires(strtotime('+7 days'));
    $coupon->set_description('Скидка для нового пользователя ' . $user_info->user_login);

    // Ограничиваем купон по email пользователя
    $coupon->update_meta_data('customer_email', $user_info->user_email);

    $coupon->save();

    // При желании можно отправить купон на почту пользователю
    wp_mail(
        $user_info->user_email,
        'Ваш персональный купон на скидку 10%',
        'Здравствуйте, ' . $user_info->display_name . '! Ваш купон на скидку: ' . $coupon_code . '. Срок действия 7 дней.'
    );
}

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

  • Зарегистрируйте нового пользователя на сайте.
  • Перейдите в WooCommerce - Купоны и убедитесь, что появился купон с кодом, начинающимся на WELCOME-.
  • Проверьте, что у купона установлена скидка 10%, срок действия 7 дней, и он ограничен по email пользователя.
  • Убедитесь, что пользователь получил письмо с кодом купона.
  • Попробуйте применить купон в корзине под этим пользователем, чтобы проверить работоспособность.

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

  • Купон не создаётся: Проверьте, подключен ли WooCommerce и доступен ли класс WC_Coupon. Хук user_register срабатывает на раннем этапе, убедитесь, что функции вызываются в правильном месте (например, в functions.php темы или в плагине).
  • Письмо не отправляется: Проверьте настройки SMTP на сервере. Для теста используйте плагины типа WP Mail Logging.
  • Купон не применяется из-за ограничений: Убедитесь, что email пользователя корректно установлен в метаполе customer_email, и что пользователь вводит купон с правильного email.
  • Дублирование кодов купонов: При большом потоке пользователей может возникнуть коллизия. Генерируйте более длинные случайные строки или добавляйте ID пользователя в код купона.

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

  • Не вставляйте чувствительные данные в описание купона или письмо.
  • Ограничивайте количество создаваемых купонов, чтобы не засорять базу.
  • Используйте WP-Cron для периодической чистки устаревших купонов, если это необходимо.
  • Проверяйте права пользователя, если планируете расширять логику создания купонов по другим событиям.

Сравнение способов создания купонов: код vs плагины

МетодПреимуществаНедостатки
Код через хукиПолный контроль, гибкость, отсутствие лишних плагиновТребует навыков PHP, возможны баги без тестирования
Плагины для купоновПростота настройки, дополнительные функции (аналитика, условия)Нагрузка на сайт, возможные конфликты, ограничения бесплатных версий
Как удалить пустые теги и мета-теги в WordPress
13.03.2026
Как автоматизировать удаление старых постов в WordPress через 30 дней
08.04.2026
Автоматическое создание заказов и уведомлений в WooCommerce по заданным событиям
10.05.2026
Автоматизация обработки форм в WordPress с WPRemark
24.12.2025
WooCommerce: автоматическое возврат средств после отмены заказа
07.06.2026