Диагностика задачи: зачем автоматически создавать купоны после покупки
В WooCommerce часто возникает задача поощрения клиентов за совершённую покупку, например, предоставляя им скидку на следующую покупку. Автоматическое создание купонов после успешной оплаты помогает удержать покупателей и стимулировать повторные заказы без ручного вмешательства.
Как автоматически создавать купоны в WooCommerce после успешной оплаты
Основные шаги
- Отслеживаем событие успешной оплаты заказа.
- Генерируем уникальный код купона.
- Создаём купон с заданными параметрами (скидка, срок действия и пр.).
- Отправляем покупателю уведомление с купоном (через 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-плагином | Интеграция с плагином рассылки | Более продвинутые шаблоны писем | Сложнее в настройке, может требовать платных дополнений |