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

Диагностика задачи: зачем нужна скидка на первую покупку в WooCommerce?

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

Анализ решения: что нужно реализовать?

  • Проверять, совершал ли пользователь заказы раньше.
  • Если нет — автоматически применить скидку на корзину.
  • Обеспечить настройку размера скидки (например, 10%).
  • Обработать случаи гостевого пользователя (неавторизованного).
  • Обеспечить совместимость с кэшированием и другими плагинами скидок.

Пошаговое решение: код для автоматической скидки на первую покупку

Добавьте следующий код в functions.php вашей дочерней темы или в отдельный плагин:

add_action('woocommerce_cart_calculate_fees', 'wptips_add_first_order_discount', 20, 1);
function wptips_add_first_order_discount( $cart ) {
    if ( is_admin() && ! defined('DOING_AJAX') ) return;

    // Проверяем, авторизован ли пользователь
    if ( ! is_user_logged_in() ) return;

    $user_id = get_current_user_id();

    // Проверяем, есть ли у пользователя завершённые заказы
    $args = array(
        'customer_id' => $user_id,
        'status' => array('wc-completed', 'wc-processing'),
        'limit' => 1,
        'return' => 'ids',
    );
    $orders = wc_get_orders( $args );

    // Если заказов нет — применяем скидку
    if ( count($orders) === 0 ) {
        $discount_percent = 10; // Размер скидки в процентах
        $discount_amount = $cart->subtotal * ($discount_percent / 100);

        // Добавляем отрицательную плату — скидку
        $cart->add_fee( sprintf('Скидка %d%% на первую покупку', $discount_percent), -$discount_amount );
    }
}

Как работает код

При пересчёте корзины функция проверяет, авторизован ли пользователь и есть ли у него завершённые или в обработке заказы. Если заказов нет, добавляется скидка в виде отрицательной платы. Скидка считается от текущей суммы корзины (без учёта налогов и других сборов).

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

  1. Залогиньтесь под новым тестовым пользователем без заказов.
  2. Добавьте товар в корзину и перейдите к корзине.
  3. Убедитесь, что внизу корзины появилась строка с вашей скидкой, и итоговая сумма уменьшилась на 10%.
  4. Сделайте заказ и вновь зайдите в корзину — скидка больше не должна применяться.
  5. Попробуйте под гостевым пользователем — скидка не должна появляться (чтобы не было злоупотреблений).

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

  • Скидка не применяется: Проверьте, что в теме или плагине нет конфликтов с другими хуками на woocommerce_cart_calculate_fees. Также важен порядок приоритета — 20 обычно подходит.
  • Скидка видна гостям: Код специально игнорирует неавторизованных, но если хотите разрешить гостям — нужен другой подход, например, через куки.
  • Неправильный размер скидки: Убедитесь, что берёте правильную сумму корзины через $cart->subtotal, а не $cart->total.
  • Конфликты с другими скидками и купонами: Проверьте, что плагин скидок корректно взаимодействует с этим кодом. Возможно, придётся менять приоритеты.

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

  • Не используйте автоматические скидки для гостей без ограничений — это риск злоупотреблений.
  • Кеширование корзины и страниц оформления заказа может мешать корректному применению скидок. Убедитесь, что корзина не кешируется.
  • Для сложных сценариев (например, комбинирование с купонами) лучше использовать проверенные плагины или расширять логику с учётом всех условий.

Сравнение подходов для реализации скидки на первую покупку в WooCommerce

МетодОписаниеПлюсыМинусы
Код в functions.phpПростой код для автоматической скидки при первой покупкеЛёгкая настройка, без плагинов, контроль логикиТребует навыков, возможны конфликты, не для гостей
Плагин скидок (например, WooCommerce Smart Coupons)Плагин с визуальным интерфейсом для создания купонов и скидокМного функций, поддержка, удобствоНагрузка на сайт, иногда платно
Использование купонов вручнуюСоздание купона и рассылка клиентамПростота, нет кодаНе автоматизировано, требует ручных действий
Как установить ограничения на количество просмотров страницы в WordPress
29.12.2025
Как создать автоматический импорт продуктов в WooCommerce из Google Sheets
12.04.2026
Как использовать мета-записи для оптимизации WordPress
04.01.2026
Как использовать AJAX в WordPress для динамического обновления контента
20.02.2026
Как установить ограничения на регистрацию пользователей в WordPress
24.03.2026