Проблема: как автоматически выдавать купон покупателю после заказа в WooCommerce
Частая задача интернет-магазинов — стимулировать повторные покупки, выдавая покупателю купон на скидку сразу после оформления заказа. WooCommerce не предоставляет такой функционал из коробки. В статье разберём, как реализовать автоматическое создание и отправку купона клиенту по email после успешного оформления заказа с помощью кода.
Диагностика задачи
Перед реализацией важно понять, что именно нам нужно:
- Создавать уникальный купон для каждого покупателя;
- Настраивать параметры купона: размер скидки, срок действия, ограничения;
- Отправлять клиенту email с информацией о купоне;
- Избежать дублирования и ошибок в генерации купонов;
- Не снижать производительность магазина.
Пошаговое решение: реализация через хук WooCommerce
1. Создаём функцию генерации уникального купона
function wpone_generate_unique_coupon_code() {
$prefix = 'WPONE';
$unique = strtoupper( wp_generate_password( 8, false, false ) );
return $prefix . '-' . $unique;
}
Функция генерирует строку с префиксом и случайным набором букв/цифр.
2. Создаём купон программно
function wpone_create_coupon_for_customer( $order_id ) {
if ( ! $order_id ) return;
$order = wc_get_order( $order_id );
$user_id = $order->get_user_id();
// Генерируем уникальный код
$coupon_code = wpone_generate_unique_coupon_code();
// Параметры купона
$amount = '10'; // Скидка 10%
$discount_type = 'percent'; // Тип скидки
$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_individual_use( true );
$coupon->set_usage_limit( 1 );
$coupon->set_usage_limit_per_user( 1 );
$coupon->set_description( 'Автоматический купон для пользователя ID ' . $user_id );
$coupon->save();
// Отправляем email с купоном
wpone_send_coupon_email( $order, $coupon_code, $expiry_date );
}
add_action( 'woocommerce_thankyou', 'wpone_create_coupon_for_customer' );
3. Отправка email с купоном
function wpone_send_coupon_email( $order, $coupon_code, $expiry_date ) {
$to = $order->get_billing_email();
$subject = 'Ваш купон на скидку от нашего магазина';
$message = "Здравствуйте!\n\nСпасибо за покупку. В качестве бонуса мы дарим вам купон на 10% скидку для следующего заказа.";
$message .= "\n\nКод купона: " . $coupon_code;
$message .= "\nСрок действия: " . $expiry_date;
$message .= "\n\nИспользуйте его при оформлении следующего заказа.";
wp_mail( $to, $subject, $message );
}
Проверка результата после внедрения
- Оформите тестовый заказ под обычным пользователем;
- После успешного завершения заказа проверьте, появился ли новый купон в разделе WooCommerce > Купоны;
- Проверьте email покупателя — должен прийти письмо с кодом купона и сроком действия;
- Попробуйте применить купон на следующий заказ — должна сработать скидка 10%.
Частые ошибки и способы исправления
- Купон не создаётся: проверьте, что функция привязана к хуку
woocommerce_thankyou, и что в параметре$order_idпередаётся корректный ID заказа. - Дубли купонов: убедитесь, что функция генерации кода действительно создаёт уникальные коды, можно добавить проверку существования купона с таким кодом в базе.
- Письма не отправляются: проверьте настройки SMTP сервера или используйте плагин для корректной отправки почты (например, WP Mail SMTP).
- Скидка не применяется: проверьте настройки купона в админке, особенно ограничения по использованию и срок действия.
Практические советы по оптимизации и безопасности
- Уникальность кода купона проверяйте через
wc_get_coupon_id_by_code(), чтобы избежать конфликтов. - Ограничьте срок действия купонов, чтобы не создавать «вечные» скидки.
- Используйте индивидуальное использование купона, чтобы он не совмещался с другими скидками.
- В целях безопасности не добавляйте в код купона личные данные пользователей.
- Для повышения производительности не вызывайте тяжелые операции при генерации купона, сохраняйте минимум данных.
Сравнение подходов: плагин vs код
| Подход | Плюсы | Минусы |
|---|---|---|
| Плагин (например, AutomateWoo, Advanced Coupons) | Быстрая настройка, готовый функционал, поддержка | Стоимость, возможные конфликты, нагрузка на сайт |
| Самописный код (как в статье) | Полный контроль, лёгкость, отсутствие лишнего кода | Требует навыков программирования, поддержка на вас |