wpconsult.ru wordpress WP Consult

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

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

В интернет-магазинах на WooCommerce часто возникает необходимость поощрять покупателей — например, выдавать персональные купоны на скидку после успешной покупки. Это повышает лояльность и стимулирует повторные заказы. Однако WooCommerce не предлагает встроенного решения для автоматического создания купонов после оформления заказа.

Задача: после успешного завершения заказа создать уникальный купон с определенными параметрами и отправить его покупателю на email.

Пошаговое решение: создание купона программно через хук

1. Подключение к нужному хук-эвенту

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

add_action('woocommerce_order_status_completed', 'wpconsult_create_coupon_after_order', 10, 1);

2. Функция создания купона

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

function wpconsult_create_coupon_after_order($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);
    if (!$order) return;

    $user_email = $order->get_billing_email();
    if (!$user_email) return;

    // Генерация уникального кода купона
    $coupon_code = 'DISCOUNT_' . strtoupper(wp_generate_password(6, false, false));

    // Проверяем, что купон не существует
    if (get_page_by_title($coupon_code, OBJECT, 'shop_coupon')) {
        // Если есть совпадение, добавляем суффикс
        $coupon_code .= '_' . wp_rand(100, 999);
    }

    $amount = '10'; // сумма скидки
    $discount_type = 'percent'; // тип скидки: процент

    $coupon = array(
        'post_title' => $coupon_code,
        'post_content' => '',
        'post_status' => 'publish',
        'post_author' => 1,
        'post_type' => 'shop_coupon'
    );

    $new_coupon_id = wp_insert_post($coupon);

    // Устанавливаем мета для купона
    update_post_meta($new_coupon_id, 'discount_type', $discount_type);
    update_post_meta($new_coupon_id, 'coupon_amount', $amount);
    update_post_meta($new_coupon_id, 'individual_use', 'yes');
    update_post_meta($new_coupon_id, 'usage_limit', '1');
    update_post_meta($new_coupon_id, 'usage_limit_per_user', '1');
    update_post_meta($new_coupon_id, 'limit_usage_to_x_items', '');
    update_post_meta($new_coupon_id, 'free_shipping', 'no');
    update_post_meta($new_coupon_id, 'product_ids', '');
    update_post_meta($new_coupon_id, 'exclude_product_ids', '');
    update_post_meta($new_coupon_id, 'usage_count', '0');
    update_post_meta($new_coupon_id, 'expiry_date', '');
    update_post_meta($new_coupon_id, 'apply_before_tax', 'yes');
    update_post_meta($new_coupon_id, 'customer_email', array($user_email));

    // Отправка email с купоном
    $subject = 'Ваш персональный купон на скидку 10%';
    $message = 'Спасибо за покупку! Используйте купон <strong>' . $coupon_code . '</strong> при следующем заказе, чтобы получить 10% скидку.';
    wp_mail($user_email, $subject, $message);
}

3. Размещение кода

Добавьте этот код в файл functions.php вашей дочерней темы или в отдельный плагин для кастомизации.

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

  • Оформите тестовый заказ и переведите его статус в «Завершён».
  • Проверьте в админке WooCommerce → Купоны наличие нового купона с уникальным кодом.
  • Проверьте почту покупателя — должен прийти email с кодом купона.
  • Попробуйте применить купон в корзине — должна работать скидка 10%.

Частые ошибки и как их исправить

  • Купон не создаётся: проверьте, что хук woocommerce_order_status_completed срабатывает (можно временно добавить error_log внутри функции).
  • Почта не отправляется: проверьте настройки SMTP и логи почтового сервера. WP по умолчанию использует wp_mail(), для надежности настройте SMTP через плагин.
  • Купон создаётся, но не работает: проверьте, что у купона корректные мета-данные, особенно customer_email — он ограничивает использование купона только на конкретный email.
  • Повторяющиеся коды купонов: добавьте проверку уникальности, как в примере, или используйте более длинные случайные строки.

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

  • Используйте валидацию данных — например, проверяйте корректность email перед созданием купона.
  • Ограничьте срок действия купона, добавив в мета expiry_date с датой через 30 дней:
update_post_meta($new_coupon_id, 'expiry_date', date('Y-m-d', strtotime('+30 days')));
  • Чтобы избежать нагрузки при большом количестве заказов, используйте кэширование и минимизируйте сложную логику внутри функции создания купона.
  • Для более продвинутых сценариев рассмотрите отправку email через очереди (например, с помощью WP-Cron или внешнего сервиса), чтобы не задерживать процесс оформления заказа.

Сравнение подходов: код vs. плагины

ПодходПреимуществаНедостатки
Код в functions.phpПолный контроль, нет зависимостей, легко кастомизироватьТребует навыков, возможны ошибки, сложнее поддерживать
Плагины (например, WooCommerce Smart Coupons)Готовые функции, поддержка, интерфейсМожет быть тяжеловесным, не всегда точное соответствие требованиям
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее