Исправление ошибки, когда корзина WooCommerce очищается после обновления страницы

Если в WooCommerce корзина заполняется, но после обновления страницы товары исчезают, проблема почти всегда лежит в одном из трёх мест: сессии WooCommerce, конфликте кеширования или некорректной настройке домена и HTTPS. Это не тот случай, где помогает «почистить кеш и всё пройдет» — нужно проверить цепочку целиком.

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

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

Диагностика: что проверить в первую очередь

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

1. Проверка cookies и сессии

Откройте DevTools в браузере, вкладку Application или Storage, и посмотрите, появляются ли cookies WooCommerce после добавления товара:

  • woocommerce_cart_hash
  • woocommerce_items_in_cart
  • wp_woocommerce_session_*

Если cookies не появляются вообще, проблема может быть в блокировке cookies, ошибке JavaScript или в том, что сайт отдаёт разные домены для одной и той же страницы.

2. Проверка кеша страницы корзины

Страницы /cart/, /checkout/ и /my-account/ не должны отдавать статический кеш для гостей так же, как обычные страницы каталога. Если на сайте стоит серверный кеш, CDN или плагин кеширования, убедитесь, что эти URL исключены из кеша.

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

3. Проверка адреса сайта и HTTPS

В Настройки → Общие адрес WordPress и адрес сайта должны совпадать по схеме и домену: либо оба с https://, либо оба без редиректов на старый вариант. Если сайт открывается и по www, и без www, а cookies привязаны к одному варианту, корзина может сбрасываться при переходе между версиями домена.

Что делать: пошаговое решение

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

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

Если используете плагин кеширования, добавьте в исключения:

  • /cart/
  • /checkout/
  • /my-account/
  • страницу с мини-корзиной, если она отдельная и кешируется на уровне шаблона

Если есть CDN, проверьте, не кэширует ли он HTML для гостей. Для WooCommerce это частая причина «плавающей» корзины: на одном запросе всё работает, на следующем — уже нет.

Шаг 2. Приведите домен к одному варианту

Выберите один канонический вариант: с www или без него, и настройте постоянный редирект на него. Важно, чтобы WordPress, WooCommerce, SSL и сервер не спорили между собой. Если на уровне nginx/apache один вариант редиректит на другой, а в настройках WordPress указан третий, сессии и cookies могут вести себя нестабильно.

Шаг 3. Проверьте, не ломает ли тему AJAX-обновление корзины

Некоторые темы и конструкторы вмешиваются в мини-корзину, подменяют шаблоны или отключают стандартные скрипты WooCommerce. Если корзина очищается только на определённой теме, временно переключитесь на стандартную тему и проверьте поведение ещё раз. Это самый быстрый способ понять, виноват ли шаблон.

Шаг 4. Явно инициализируйте сессию WooCommerce в спорных случаях

Если проблема возникает только у гостей и после этого не воспроизводится у авторизованных пользователей, можно проверить, создаётся ли сессия на раннем этапе. В некоторых сценариях помогает небольшой код в плагине или functions.php дочерней темы:

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

Этот код не лечит кеш или неправильный домен, но помогает в случаях, когда сессия не стартует вовремя из-за нестандартной темы, оптимизатора скриптов или раннего вывода HTML.

Шаг 5. Убедитесь, что AJAX WooCommerce не блокируется

Проверьте, что запросы к ?wc-ajax=add_to_cart и ?wc-ajax=get_refreshed_fragments возвращают корректный ответ, а не 403, 404 или HTML-страницу ошибки. Если эти запросы режет WAF, security-плагин или серверное правило, корзина может визуально обновляться, но данные не сохранятся.

add_action( 'wp_ajax_nopriv_woocommerce_add_to_cart', 'wp_ajax_nopriv_woocommerce_add_to_cart' );

Этот пример здесь не нужен как решение — он приведён только как ориентир: не пытайтесь «чинить» корзину через самописные AJAX-обработчики, если стандартный механизм WooCommerce уже должен работать. Ищите блокировку на уровне кеша, безопасности или шаблона.

Сравнение подходов: что быстрее и безопаснее

ПодходКогда подходитМинус
Настройка исключений кешаЕсли проблема проявляется у всех гостейНужно проверить серверный и плагинный кеш отдельно
Исправление домена и HTTPSЕсли сайт доступен по нескольким вариантам URLТребует аккуратной правки редиректов и cookies
Код для инициализации сессииЕсли тема или оптимизация ломает старт сессииНе решает конфликт кеша и CDN

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

Проверка должна быть не одной, а в нескольких сценариях:

  • добавьте товар в корзину как гость и обновите страницу;
  • откройте корзину в новом окне и проверьте, сохранились ли товары;
  • очистите cookies сайта и повторите тест;
  • проверьте поведение на мобильном браузере, если там используется отдельный кеш или ускоритель;
  • посмотрите Network в DevTools: запросы WooCommerce должны возвращать 200, а не редирект на HTML-страницу логина или ошибки.

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

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

Кешируют страницу корзины целиком

Это самая частая причина. Исправление простое: исключить корзину, оформление и личный кабинет из кеша на всех уровнях — плагин, сервер, CDN.

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

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

Оптимизатор скриптов ломает WooCommerce fragments

Минификация и отложенная загрузка JavaScript иногда мешают cart-fragments. Если после включения оптимизации корзина стала вести себя нестабильно, добавьте скрипты WooCommerce в исключения.

Security-плагин режет AJAX-запросы

Если включена агрессивная защита от ботов, она может блокировать wc-ajax. В логах это часто выглядит как 403 или подозрительный POST-запрос. Проверьте правила WAF и исключения для WooCommerce.

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

Не отключайте кеш на всём сайте ради одной проблемы. Для WooCommerce достаточно точечных исключений. Это сохранит скорость каталога и не сломает корзину.

Если используете плагины оптимизации, тестируйте изменения по одному: сначала кеш, потом JS-оптимизацию, потом CDN. Иначе вы не поймёте, что именно сломало сессию.

Для сайтов с высокой нагрузкой полезно отдельно проверить серверные логи и ответы на add_to_cart и get_refreshed_fragments. Это быстрее, чем гадать по поведению фронтенда. Если нужен аккуратный набор оптимизаций без лишних ручных правок, иногда проще опереться на Clearfy Pro, но только после проверки, что он не конфликтует с вашей схемой кеширования: https://wpshop.ru/plugins/clearfy?utm_source=wpmanager.ru&utm_medium=article&utm_campaign=ispravlenie-oshibki-woocommerce-pustaya-korzina-posle-obnovleniya-stranitsy

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать свой плагин для WordPress с нуля: пошаговое руководство
11.11.2025
Оптимизация базы данных WordPress: удаление autosave и revision для ускорения сайта
17.11.2025
Автоматическое управление виджетами WordPress с помощью кода: практическое руководство
28.02.2026
Как закрыть staging-сайт WordPress от индексации без ошибок в robots.txt и meta robots
17.08.2026
Автоматическое изменение цен в WooCommerce по условиям: практическое руководство
20.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее