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
04.03.2026
Как создать автоматические редиректы в WordPress
08.02.2026
WooCommerce: автоматическое изменение стоимости товаров при изменении варианта
10.06.2026
Как создать динамический вывод постов в WordPress
29.11.2025
Как создать автоматические заголовки для постов в WordPress
18.01.2026