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

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

В WooCommerce иногда возникает ситуация, когда при добавлении товара в корзину пользователь неожиданно видит пустую корзину или корзина «сбрасывается». Это проявляется в том, что после клика «Добавить в корзину» страница обновляется, но товар в корзине не отображается, или корзина становится пустой.

Основные причины такой проблемы:

  • Конфликт с кэшированием (плагинами кэширования, серверным кэшом или CDN);
  • Проблемы с сессиями PHP или cookies;
  • Ошибки в теме или кастомных функциях, влияющих на работу корзины;
  • Неправильная настройка AJAX добавления в корзину для AJAX-версий кнопок;
  • Отсутствие или повреждение необходимых WooCommerce скриптов на странице.

Пошаговое решение проблемы отключения корзины

1. Отключите кэширование для страниц корзины и добавления в корзину

Плагины кэширования (WP Super Cache, W3 Total Cache, LiteSpeed Cache и др.) и CDN (Cloudflare, Varnish) могут кэшировать страницы и блокировать динамическое обновление корзины.

Добавьте в .htaccess или настройте плагин кэширования исключение для следующих URL:

  • /cart/
  • /checkout/
  • AJAX-запросы WooCommerce (обычно /wp-admin/admin-ajax.php)

Пример правила для .htaccess:

RewriteCond %{REQUEST_URI} ^/cart/ [NC,OR]
RewriteCond %{REQUEST_URI} ^/checkout/ [NC]
RewriteRule .* - [E=NO_CACHE:1]

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

2. Проверьте работу сессий PHP и cookies

WooCommerce использует сессии для хранения состояния корзины. Проверьте, что на сервере корректно работают сессии PHP:

  • В php.ini проверьте параметры session.save_path и разрешения на запись;
  • Очистите cookies сайта в браузере и повторите попытку;
  • Проверьте, нет ли конфликтов с куки, например, из-за неправильного домена или протокола (http/https).

3. Отключите все плагины, кроме WooCommerce, и смените тему на дефолтную

Для выявления конфликтов рекомендуется временно отключить все плагины, кроме WooCommerce, и переключиться на стандартную тему (например, Storefront или Twenty Twenty-Three). Если проблема исчезнет, включайте плагины по одному, чтобы найти конфликтующий.

4. Проверьте правильность AJAX добавления товара

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

add_filter('woocommerce_add_to_cart_fragments', 'custom_woocommerce_header_add_to_cart_fragment');
function custom_woocommerce_header_add_to_cart_fragment( $fragments ) {
    ob_start();
    ?>
    <a class="cart-contents" href="<?php echo wc_get_cart_url(); ?>" title="Корзина">
        <?php echo WC()->cart->get_cart_contents_count(); ?> товар(ов) - <?php echo WC()->cart->get_cart_total(); ?>
    </a>
    <?php
    $fragments['a.cart-contents'] = ob_get_clean();
    return $fragments;
}

Также убедитесь, что в консоли браузера нет ошибок JavaScript, которые блокируют выполнение скриптов WooCommerce.

5. Проверьте правильность подключения WooCommerce скриптов

Иногда тема или плагины отключают важные скрипты WooCommerce. В functions.php темы проверьте, нет ли кода, который деактивирует скрипты:

remove_action('wp_enqueue_scripts', 'woocommerce_frontend_scripts');

Если есть, закомментируйте или удалите этот код.

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

После внесения изменений:

  • Очистите все кэши (плагинов, браузера, CDN);
  • Проверьте добавление товара в корзину с разных браузеров и в режиме инкогнито;
  • Убедитесь, что количество товаров в корзине обновляется без перезагрузки страницы (если используется AJAX);
  • Проверьте наличие товаров в корзине на странице /cart/;
  • Просмотрите консоль браузера на наличие ошибок JavaScript.

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

  • Кэширование корзины и страниц WooCommerce. Решение: исключить страницы корзины и AJAX-запросы из кэширования.
  • Недостаточно прав на запись для сессий PHP. Решение: исправить права на папку сессий или изменить путь сохранения сессий.
  • Конфликт JS-скриптов в теме или плагинах. Решение: отключить плагины/тему поочередно, проверить консоль браузера.
  • Отсутствие поддержки AJAX для кастомных кнопок «Добавить в корзину». Решение: добавить поддержку AJAX через хуки и фильтры WooCommerce.
  • Ошибки в пользовательских фильтрах, связанных с корзиной. Решение: временно отключить кастомный код и проверить работу.

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

  • Используйте HTTPS для сайта, чтобы cookies WooCommerce были защищены и корректно передавались;
  • Обновляйте WooCommerce и плагины до последних версий для исправления багов;
  • Минимизируйте количество плагинов, чтобы избежать конфликтов и снижения производительности;
  • Для сайтов с большим трафиком применяйте продвинутые решения кэширования с исключениями для динамических страниц;
  • Регулярно проверяйте логи ошибок сервера и консоль браузера для выявления проблем.

Сравнение способов решения проблемы

Метод Плюсы Минусы Когда использовать
Отключение кэширования страниц корзины и AJAX-запросов Простое и надежное решение, не требует кода Может снизить производительность при высоком трафике Подходит для большинства сайтов
Исправление сессий PHP Обеспечивает стабильную работу корзины Требует доступа к серверу и знаний администрирования Когда проблемы связаны с серверной конфигурацией
Использование AJAX для добавления товара Улучшает UX, корзина обновляется без перезагрузки Нужны навыки JS и понимание WooCommerce хуков Для кастомных интерфейсов и тем
Как использовать автоматическое удаление старых записей в WordPress с помощью WP-Cron
21.03.2026
Как заменить default-аватар в WordPress: практическое руководство
09.04.2026
WooCommerce: как сделать автоматическое изменение стоимости товара при определённых условиях
08.05.2026
Как создать собственный шорткод в WordPress
02.11.2025
WooCommerce: автоматическое изменение цены товара при заданных условиях
29.04.2026