Диагностика задачи: зачем создавать купоны автоматически?
В интернет-магазинах на WooCommerce часто возникает необходимость поощрять покупателей скидками на следующие заказы. Ручное создание купонов занимает время и не масштабируется. Автоматическое создание купонов с уникальными кодами и индивидуальными параметрами решает эту задачу.
Основные требования к автоматизации:
- Создавать купон сразу после завершения заказа;
- Генерировать уникальный код купона;
- Настраивать параметры: сумму скидки, срок действия, применимость;
- Отправлять купон клиенту по email.
Как реализовать автоматическое создание купона после заказа
Подключение к хуку завершения заказа
В WooCommerce есть хук woocommerce_order_status_completed, который срабатывает, когда заказ помечается как "завершённый". Используем его для создания купона.
Пример кода для создания купона с уникальным кодом
add_action('woocommerce_order_status_completed', 'create_coupon_after_order', 10, 1);
function create_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));
// Параметры купона
$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(strtotime($expiry_date));
$coupon->set_description('Автоматически созданный купон для клиента');
$coupon->set_usage_limit(1); // ограничение на 1 использование
$coupon->set_individual_use(true); // не комбинируется с другими купонами
// Ограничение по пользователю
$user_id = $order->get_user_id();
if ($user_id) {
$coupon->set_email_restrictions(array($order->get_billing_email()));
}
$coupon->save();
// Отправка email клиенту
$to = $order->get_billing_email();
$subject = 'Ваш персональный купон на скидку';
$message = "Спасибо за покупку! Ваш купон со скидкой: " . $coupon_code . ". Срок действия: " . $expiry_date . ". Используйте его при следующем заказе.";
wp_mail($to, $subject, $message);
}Проверка результата
1. Создайте тестовый заказ и переведите его в статус "Завершён" через админку WooCommerce.
2. Проверьте таблицу купонов в админке WooCommerce — должен появиться новый купон с уникальным кодом.
3. Проверьте почту, указанную в заказе — должен прийти email с кодом купона и сроком действия.
4. Попробуйте применить купон на следующий заказ — скидка должна сработать.
Частые ошибки и их исправление
- Купон не создаётся: проверьте, что функция подключена правильно, и используется хук
woocommerce_order_status_completed. Убедитесь, что в заказе есть email покупателя. - Купон не применяется: проверьте настройки купона — особенно ограничения по email и тип скидки. Убедитесь, что купон не истёк.
- Письмо не отправляется: проверьте настройку почты WordPress (
wp_mail). Для отладки используйте плагины типа WP Mail Logging. - Код купона не уникален: используйте функцию
wp_generate_passwordс параметрами, как в примере, чтобы минимизировать коллизии.
Практические советы по безопасности и производительности
- Ограничивайте использование купонов одной покупкой, чтобы избежать злоупотреблений.
- Храните купоны только с минимально необходимыми правами доступа, избегайте хранения чувствительных данных.
- Используйте SMTP-плагины для надежной отправки почты.
- Оптимизируйте код, избегая излишних запросов к базе данных внутри хука.
Сравнение вариантов автоматического создания купонов
| Вариант | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| Ручное создание | Простота | Ручной труд, нет автоматизации | Подходит для небольших магазинов |
| Код через хук (как в статье) | Гибкость, уникальные настройки | Требует навыков разработки | Лучше для магазинов с разработчиком |
| Плагин для купонов | Простота внедрения | Может быть избыточным, нагрузка | Подходит для пользователей без кода |