Как отключить сброс корзины WooCommerce при обновлении страницы

Если корзина в WooCommerce ведёт себя нестабильно после обновления страницы, проблема обычно не в самом браузере. Чаще всего ломается сохранение сессии, конфликтует кэш, некорректно настроены cookie или тема/плагин вмешиваются в работу AJAX и fragments. В итоге пользователь добавляет товар, обновляет страницу — и видит пустую корзину либо старое состояние.

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

Как выглядит проблема на практике

Типичный сценарий такой: товар добавляется в корзину, мини-корзина обновляется, но после F5 или перехода по внутренней ссылке количество товаров пропадает. Иногда проблема проявляется только у гостей, а у авторизованных пользователей корзина работает нормально. Это важная подсказка: в таком случае чаще всего виноваты cookie, кэширование или настройка домена/HTTPS.

Что проверить в первую очередь

  • Сохраняется ли корзина у авторизованного пользователя и у гостя одинаково.
  • Не включён ли кэш для страниц /cart/, /checkout/ и страниц с корзиной в шапке.
  • Совпадает ли домен сайта в Настройки → Общие с фактическим адресом в браузере.
  • Нет ли редиректов между http и https, а также между www и без www.
  • Не ломает ли тему вывод мини-корзины через устаревшие шаблоны WooCommerce.

Диагностика: где именно теряется корзина

Начинать лучше не с кода, а с проверки сессии и cookie. WooCommerce хранит состояние корзины через свои cookie и сессионные данные. Если браузер не получает или не отправляет нужные cookie, корзина будет вести себя как новая после каждого обновления.

Откройте DevTools в браузере и проверьте:

  • есть ли cookie WooCommerce после добавления товара;
  • не блокируются ли они политикой SameSite или сторонним скриптом;
  • не меняется ли домен страницы между действиями;
  • не подставляет ли кэш старую HTML-версию мини-корзины.

Если у вас включён серверный или плагинный кэш, временно исключите из него корзину, оформление заказа и страницу аккаунта. Для теста полезно также открыть сайт в приватном окне и без расширений браузера.

Пошаговое решение без лишних рисков

1. Исключите корзину и оформление заказа из кэша

Это базовый шаг. Страницы корзины и оформления заказа не должны отдаваться как статический HTML из кэша, иначе пользователь будет видеть устаревшее состояние. Если кэшируется мини-корзина в хедере, её тоже нужно исключить или перевести на корректное обновление fragments.

Если используете серверный кэш, проверьте правила исключений на уровне плагина, Nginx, Varnish или CDN. Для Cloudflare и похожих сервисов важно не только исключить URL, но и убедиться, что не кэшируются ответы с cookie WooCommerce.

2. Проверьте домен, HTTPS и cookie path

Частая причина сброса корзины — сайт открывается то с www, то без него, либо часть запросов уходит по http. Для WooCommerce это разные контексты cookie. В Настройки → Общие адрес WordPress и адрес сайта должны совпадать с реальным каноническим адресом.

Если сайт уже переведён на HTTPS, убедитесь, что не осталось смешанного контента и старых редиректов в .htaccess или конфиге сервера.

3. Сбросьте сессии WooCommerce после исправлений

После изменения домена, HTTPS или cookie-политики старые сессии могут мешать тесту. В админке WooCommerce есть инструменты состояния, где можно очистить временные данные и сессии. Это не лечит причину, но помогает проверить, что проблема не в старом мусоре.

4. Уберите конфликтующий код темы или плагина

Иногда корзину ломает кастомный код, который вмешивается в woocommerce_add_to_cart_fragments, woocommerce_before_calculate_totals или в шаблоны мини-корзины. Если после обновления страницы пропадает только виджет корзины, а сама корзина в /cart/ сохраняется, проблема почти наверняка в fragments или шаблоне темы.

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

Рабочий пример: принудительно обновить fragments корзины

Если мини-корзина в шапке показывает старое состояние после обновления, можно проверить, не ломается ли обновление fragments. Ниже пример, который добавляет в fragments актуальное количество товаров и HTML корзины. Код не решает проблемы кэша сам по себе, но помогает исключить ошибку в теме.

add_filter( 'woocommerce_add_to_cart_fragments', function( $fragments ) {
	ob_start();
	?>
	<span class="header-cart-count"><?php echo WC()->cart ? WC()->cart->get_cart_contents_count() : 0; ?></span>
	<?php
	$fragments['span.header-cart-count'] = ob_get_clean();

	ob_start();
	woocommerce_mini_cart();
	$fragments['div.widget_shopping_cart_content'] = ob_get_clean();

	return $fragments;
} );

Если после этого счётчик и мини-корзина начинают обновляться корректно, значит проблема была в шаблоне или в том, как тема выводила корзину. Если же состояние всё равно сбрасывается после F5, ищите причину в кэше, cookie или сессии.

Когда нужен более жёсткий контроль сессии

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

add_action( 'wp_loaded', function() {
	if ( function_exists( 'WC' ) && WC()->session ) {
		WC()->session->set_customer_session_cookie( true );
	}
} );

Использовать такой код стоит осторожно и только после диагностики. Он не заменяет нормальную настройку кэша и домена, а лишь помогает убедиться, что сессия создаётся вовремя. Если проблема вызвана сторонним кэшем, этот приём не должен быть основным решением.

Сравнение подходов

ПодходКогда уместенМинус
Исключить корзину из кэшаКорзина сбрасывается после F5 у гостейНужно правильно настроить исключения на всех уровнях
Исправить домен и HTTPSЕсть переходы между www/non-www или http/httpsМожет потребоваться очистка старых сессий
Починить fragments в темеМини-корзина показывает старые данныеНе решает проблемы с серверным кэшем

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

После правок не ограничивайтесь одним тестом. Проверьте корзину в нескольких сценариях:

  • гость добавляет товар, обновляет страницу и видит тот же состав корзины;
  • авторизованный пользователь делает то же самое;
  • корзина сохраняется после перехода между страницами и возврата назад;
  • мини-корзина и страница /cart/ показывают одинаковые данные;
  • в DevTools cookie WooCommerce не исчезают после F5.

Если используете CDN, повторите тест с отключённым кэшем на стороне CDN или в режиме обхода кэша. Иначе можно ошибочно решить, что всё исправлено, хотя на продакшене проблема останется.

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

Кэш исключили только для /cart/, но забыли про мини-корзину

Это частая причина ложного успеха. Страница корзины работает, а иконка в шапке всё равно показывает старое значение. Нужно проверять не только URL, но и HTML-фрагменты, которые подставляются в шапке через AJAX.

Сайт открывается по разным адресам

Если часть ссылок ведёт на www, а часть — без него, WooCommerce может считать это разными контекстами. Исправляется единым каноническим адресом сайта и проверкой редиректов на уровне сервера.

Оптимизатор JS ломает fragments

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

Старая тема переопределяет шаблоны WooCommerce

Если тема содержит устаревшие копии шаблонов из woocommerce/, они могут конфликтовать с текущей версией плагина. Сначала сравните переопределённые шаблоны с актуальными файлами WooCommerce, затем обновите или уберите лишние копии.

Что делать, если проблема проявляется только у части пользователей

Если корзина сбрасывается не у всех, а только у некоторых посетителей, смотрите на региональные CDN-правила, блокировщики рекламы, корпоративные прокси и браузерные настройки cookie. В таких случаях полезно собрать минимальный набор логов: какой URL открыт, какие cookie установлены, какой ответ отдаёт сервер на /cart/ и не меняется ли домен в цепочке редиректов.

Для магазинов с высокой нагрузкой лучше не пытаться лечить это «ускорителями» наугад. Сначала убедитесь, что WooCommerce-страницы исключены из кэша, а потом уже оптимизируйте остальной фронтенд. Если нужен общий аудит лишних дублей, кэша и мусорных скриптов, здесь может помочь Clearfy Pro, но только как инструмент для чистки и контроля, а не как замена нормальной настройки WooCommerce.

Короткий чек-лист перед релизом

  • Корзина и оформление заказа исключены из кэша.
  • Единый домен и HTTPS настроены без смешанных редиректов.
  • Мини-корзина обновляется через актуальные fragments.
  • Сторонние плагины оптимизации не ломают wc-cart-fragments.
  • После очистки сессий корзина сохраняется у гостя и у авторизованного пользователя.

Если все пункты закрыты, а корзина всё равно сбрасывается после обновления страницы, проблема уже не типовая. Тогда стоит смотреть серверные логи, цепочку редиректов и конкретные плагины, которые вмешиваются в cookie или AJAX-запросы WooCommerce.

WooCommerce: решение проблем с обновлением статуса заказа
20.06.2026
Отладка проблем с отправкой писем из WordPress и их попаданием в спам
14.06.2026
Как отключить сброс корзины WooCommerce при обновлении страницы
11.08.2026
Как использовать внешние сервисы для удалённого записи данных в WordPress
30.03.2026
Как отладить проблемы с кэшированием в WordPress
07.11.2025