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

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

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

  • Конфликты сессий и cookies WooCommerce;
  • Некорректная работа кэширования на сервере или со стороны плагинов кеширования;
  • Ошибки в кастомных фильтрах или хуках, которые сбрасывают корзину;
  • Неправильная конфигурация AJAX-запросов или устаревшие версии WooCommerce/WordPress.

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

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

Кэширование страниц с динамическим содержимым, такими как корзина и checkout, приводит к некорректному отображению содержимого корзины. Нужно исключить эти страницы из кэша.

function exclude_cart_checkout_from_cache( $excluded_urls ) {
    $excluded_urls[] = wc_get_cart_url();
    $excluded_urls[] = wc_get_checkout_url();
    return $excluded_urls;
}
add_filter( 'wp_cache_pages_exclude', 'exclude_cart_checkout_from_cache' );

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

2. Проверка и обновление сессий WooCommerce

WooCommerce использует PHP-сессии для хранения корзины. Иногда сессии могут обрываться или не сохраняться. Добавьте этот код в functions.php вашей темы для отладки:

add_action( 'init', function() {
    if ( ! WC()->session ) {
        error_log('WooCommerce session не инициализирована');
    } else {
        error_log('WooCommerce session активна');
    }
} );

Если сессия не активна, проверьте настройки PHP и наличие cookie сессии в браузере.

3. Отключение ошибок в кастомных хуках, сбрасывающих корзину

Проверьте, нет ли в functions.php или плагинах вызовов WC()->cart->empty_cart() или фильтров, которые могут очищать корзину без условий.

// Пример неправильного кода, вызывающего очистку корзины:
add_action('template_redirect', function() {
    WC()->cart->empty_cart();
});

Удалите или исправьте подобный код.

4. Обновление WooCommerce и WordPress до последних версий

Устаревшие версии могут содержать баги с сессиями и корзиной. Проверьте и обновите ядро и плагины.

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

Чтобы удостовериться, что проблема решена, выполните следующие шаги:

  1. Добавьте товар в корзину;
  2. Обновите страницу корзины или любую другую страницу сайта;
  3. Убедитесь, что товар остался в корзине и количество не сбросилось;
  4. Проверьте cookie браузера – должен быть установлен woocommerce_cart_hash и woocommerce_items_in_cart;
  5. Проверьте логи сервера на предмет ошибок сессии (если включено логирование).

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

  • Повторное очищение корзины кастомным кодом: иногда разработчики добавляют хуки, которые очищают корзину для тестов и забывают удалить их. Проверьте весь кастомный код.
  • Кэширование не исключает динамические страницы: если кэш плагина не исключает страницы корзины, это приведет к проблемам. Настройте исключения.
  • Вмешательство сторонних плагинов: плагины оптимизации и безопасности могут блокировать cookie или сессии. Отключите их поочередно для диагностики.
  • Неправильный домен cookie: если сайт работает на поддоменах или с www/без www, cookie могут не сохраняться. Проверьте настройки cookie в браузере.

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

  • Безопасность сессий: убедитесь, что сессии WooCommerce хранятся безопасно и не доступны публично. Используйте SSL для всего сайта.
  • Оптимизация кэширования: исключайте из кэширования все страницы с динамическим содержимым — корзина, оформление заказа, аккаунт пользователя.
  • Минимизация кастомных изменений: для изменения поведения корзины используйте хуки WooCommerce, избегайте прямых вызовов методов типа empty_cart() без условий.

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

МетодПлюсыМинусыКогда использовать
Исключение кэширования страниц корзиныПростое, надежное решениеМожет снизить эффективность кэшированияЕсли используется серверное или плагин кэширование
Проверка и исправление сессий WooCommerceИсправляет корневые проблемы с корзинойТребует глубокого понимания PHP и WooCommerceЕсли сессии не работают корректно
Удаление кастомного кода очистки корзиныИзбавляет от ошибок, вызванных неправильным кодомТребует ревизии всего кастомного кодаПри наличии кастомных хуков для корзины
Как динамически изменить класс Gutenberg блока в WordPress
07.01.2026
Как создать динамический Gutenberg блок с внешним управлением состоянием в WordPress
14.01.2026
WooCommerce: решение проблемы, когда не открывается страница корзины после добавления товара
30.04.2026
Как создать блок с поддержкой внешних стилей в Gutenberg WordPress
30.01.2026
Как создать собственный кэширующий механизм в WordPress для ускорения сайта
10.01.2026

С появлением Gutenberg в WP появились и блоки. Однако не всем по душе новая версия редактора.