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

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

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

Однако стандартный WooCommerce не предусматривает такую логику "из коробки". Чтобы реализовать её, необходимо вмешаться в процесс добавления товаров в корзину программно.

Пошаговое решение: как добавить товар в корзину при открытии страницы

1. Определяем ID товара

Для начала необходимо знать ID товара, который нужно добавить в корзину. Его можно найти в админке WooCommerce на странице редактирования товара — в URL или в списке товаров.

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

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

function wpcom_auto_add_product_to_cart() {
    if ( is_admin() ) {
        return; // не выполняем в админке
    }

    // Проверяем, находимся ли мы на нужной странице - например, на странице с ярлыком slug 'special-offer'
    if ( is_page('special-offer') ) {
        $product_id = 123; // замените 123 на ID нужного товара

        // Проверяем, что товар ещё не в корзине
        $found = false;
        foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
            if ( $values['product_id'] == $product_id ) {
                $found = true;
                break;
            }
        }

        if ( ! $found ) {
            WC()->cart->add_to_cart( $product_id );
        }
    }
}
add_action( 'template_redirect', 'wpcom_auto_add_product_to_cart' );

3. Особенности и улучшения

  • Проверка is_admin() предотвращает добавление товара при работе в админке.
  • Хук template_redirect срабатывает после инициализации сессии и корзины.
  • Проверка наличия товара в корзине предотвращает дублирование.
  • Страница определяется через is_page('slug'), можно заменить на нужный ID страницы или другие условные теги.

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

Чтобы проверить, что товар добавлен автоматически:

  • Откройте страницу с указанным слагом (например, /special-offer/).
  • В корзине должен появиться товар с ID, указанным в коде.
  • Если обновить страницу, товар не должен дублироваться (количество не увеличится).
  • Можно добавить вывод содержимого корзины в шаблон для отладки, например:
add_action( 'wp_footer', function() {
    echo '<pre>Cart items: ' . print_r( WC()->cart->get_cart(), true ) . '</pre>';
});

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

  • Товар добавляется несколько раз при обновлении страницы: Причина — отсутствие проверки наличия товара в корзине. Решение — добавить проверку, как в примере выше.
  • Корзина пуста после перехода на страницу: Возможно, сессия WooCommerce не инициализирована. Убедитесь, что код вызывается на хуке template_redirect, а не раньше.
  • Добавление происходит в админке или в REST API запросах: Используйте условие if (is_admin()) return; и дополнительно можно проверить if (defined('REST_REQUEST') && REST_REQUEST) return;.
  • Не работает с кэшированием страниц: Автоматическое добавление в корзину зависит от сессии, а кэш может выдавать статичный контент. Используйте исключения кеша для страниц с добавлением товара.

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

  • Не добавляйте товар автоматически на всех страницах — ограничьте действие конкретными страницами.
  • Проверяйте, что пользователь не злоупотребляет функционалом, чтобы избежать надувания корзины.
  • Избегайте тяжелых запросов внутри функции — добавление товара должно быть максимально легким.
  • При использовании кэша страницы (например, с WP Rocket, LiteSpeed или Varnish) настройте исключения для страниц с автоматическим добавлением товара.

Сравнение вариантов реализации автоматического добавления товара

МетодПлюсыМинусы
Код в functions.php (как в статье)Полный контроль, без плагинов, легко кастомизироватьТребует навыков, возможные ошибки при обновлениях темы
Плагин для автодобавления товараПростота установки, готовый функционалМожет быть избыточным, нагрузка, ограниченная кастомизация
JavaScript автоматическое добавление через AJAXГибкость, не влияет на серверные процессыЗависит от клиента, может быть заблокировано, SEO не учитывает

Сервис определения шаблона и плагинов на сайте