wpconsult.ru wordpress WP Consult

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

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

В интернет-магазинах на WooCommerce бывают ситуации, когда нужно автоматически добавить товар в корзину пользователя без его прямого действия. Например, при покупке определённого товара добавить сопутствующий аксессуар, при достижении минимальной суммы заказа добавить подарок, или при входе пользователя с определённой ролью добавить бесплатный товар.

Без автоматизации такие задачи требуют от пользователя дополнительных действий, что снижает конверсию и ухудшает UX. Поэтому важно реализовать механизм автоматического добавления товаров в корзину по заданным условиям.

Как проверить, что автоматическое добавление товара в корзину не работает

  • Проверьте, что в коде или плагине, реализующем добавление, используется правильный ID товара.
  • Убедитесь, что функция добавления срабатывает в нужный момент — например, на хук woocommerce_before_calculate_totals или template_redirect.
  • Проверьте, что корзина не пуста и не происходит конфликт с другими плагинами, которые могут очищать корзину.
  • Отслеживайте логи ошибок PHP и консоль браузера — возможно, возникают ошибки JS или PHP, мешающие работе.

Пошаговое решение: пример автоматического добавления товара при достижении суммы заказа

1. Создаём функцию добавления товара

function wpconsult_add_gift_product() {
    if ( is_admin() && ! defined('DOING_AJAX') ) {
        return;
    }

    // ID товара, который нужно автоматически добавить
    $gift_product_id = 123; // замените на ID вашего товара

    // Проверяем, что товар не в корзине
    $found = false;

    foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
        if ( $values['product_id'] == $gift_product_id ) {
            $found = true;
            break;
        }
    }

    // Условие: сумма корзины больше 3000
    if ( WC()->cart->subtotal >= 3000 && ! $found ) {
        WC()->cart->add_to_cart( $gift_product_id );
    } elseif ( WC()->cart->subtotal < 3000 && $found ) {
        // Удаляем товар, если условие не выполнено
        foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
            if ( $values['product_id'] == $gift_product_id ) {
                WC()->cart->remove_cart_item( $cart_item_key );
                break;
            }
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'wpconsult_add_gift_product' );

2. Куда добавить код

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

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

  • Добавьте в корзину товары на сумму больше 3000 рублей — автоматически должен добавиться подарок (товар с ID 123).
  • Уменьшите сумму заказа ниже 3000 — подарок должен автоматически удалиться из корзины.
  • Проверьте в разных браузерах и на разных устройствах, чтобы исключить кеширование.
  • Включите логирование WooCommerce и посмотрите, что добавление проходит без ошибок.

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

  • Неверный ID товара: Проверьте, что ID товара существует и опубликован.
  • Добавление товара в админке: Функция срабатывает и в админке — добавьте проверку is_admin() с исключением AJAX.
  • Конфликт с другим плагином: Отключите остальные плагины и проверьте работу, чтобы выявить конфликт.
  • Товар уже в корзине не удаляется: Убедитесь, что используете правильный метод remove_cart_item с ключом товара.

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

  • Добавляйте функцию на хук woocommerce_before_calculate_totals, так как он вызывается при обновлении корзины и перед расчетом стоимости.
  • Используйте проверку is_admin() && ! defined('DOING_AJAX'), чтобы не выполнять код в админке без AJAX-запросов.
  • Для сложных условий учитывайте кеширование и сессии пользователя, чтобы избежать излишних запросов.
  • Проверяйте права пользователя, если товар должен добавляться только авторизованным.

Сравнение вариантов реализации

СпособПлюсыМинусыКогда использовать
Код в functions.php Быстрое внедрение; полный контроль; бесплатно Нужно техническое знание; риск поломок при ошибках Небольшие правки, индивидуальные условия
Плагин автоматизации Интерфейс настроек; поддержка; шаблоны Может нагружать сайт; не всегда гибко Сложные сценарии без разработки
Сторонний сервис через API Интеграция с CRM, аналитикой Зависимость от внешних систем; задержки Автоматизация на уровне бизнеса
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙