Сценарий типичный: товар добавился, уведомление показалось, а мини-корзина, счетчик или страница корзины остаются в старом состоянии. В WooCommerce это обычно не «поломка корзины», а конфликт AJAX, кэша, темы или скриптов. Ниже — как быстро локализовать причину и исправить ее без лишних изменений в ядре.
Что именно ломается: мини-корзина, счетчик или сама страница
Сначала важно понять, где проявляется проблема. Это влияет на решение.
- Мини-корзина не меняется — часто не перерисовываются фрагменты WooCommerce или их блокирует кэш.
- Счетчик товаров в шапке не обновляется — тема выводит число через собственный шаблон и не слушает стандартные события WooCommerce.
- Страница корзины не показывает добавленный товар — запрос на добавление проходит, но сессия WooCommerce сбрасывается или конфликтует с оптимизацией JS.
Быстрая диагностика в админке и браузере
Перед правками проверьте три вещи:
- Откройте сайт в режиме инкогнито и добавьте товар в корзину.
- Посмотрите консоль браузера на ошибки JavaScript.
- Временно отключите плагины кэша, минификации и отложенной загрузки JS.
Если после отключения оптимизации корзина начинает обновляться, причина почти наверняка в кэшировании или в скриптах, которые вмешиваются в стандартные события WooCommerce.
Почему WooCommerce не обновляет корзину
У этой проблемы обычно несколько практических причин:
- страница или фрагменты корзины кэшируются как обычный HTML;
- скрипт
wc-cart-fragmentsне загружается или отложен слишком агрессивно; - тема переопределяет мини-корзину и не вызывает обновление фрагментов;
- оптимизатор объединяет JS так, что ломает зависимости WooCommerce;
- плагин безопасности или CDN режет AJAX-запросы к
?wc-ajax=add_to_cartили?wc-ajax=get_refreshed_fragments.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройка кэша | Если проблема появилась после установки кеш-плагина | Нужно исключать страницы и AJAX |
| Код в теме/плагине | Если мини-корзина не обновляется из-за темы | Требует аккуратной проверки после обновлений |
| Отключение оптимизации JS | Если ошибка появилась после ускорения сайта | Может немного ухудшить показатели загрузки |
Пошаговое решение
1. Исключите корзину и оформление из кэша
Для WooCommerce нельзя кэшировать страницы корзины, оформления заказа и «Мой аккаунт». Если кэш-плагин хранит их как обычные страницы, корзина будет вести себя непредсказуемо.
Проверьте, что исключены:
/cart//checkout//my-account/- страницы с параметрами AJAX WooCommerce
Если вы используете CDN, убедитесь, что он не кэширует ответы на запросы wc-ajax.
2. Не отключайте фрагменты корзины без причины
Иногда в попытке ускорить сайт отключают wc-cart-fragments. Это может сломать мини-корзину и счетчик в шапке. Если у вас нет точного понимания, какие элементы завязаны на этот скрипт, лучше не удалять его полностью.
Если нужно проверить, не он ли виноват, временно отключите только оптимизацию JS, а не сам WooCommerce. Так проще понять источник проблемы.
3. Принудительно обновляйте фрагменты корзины
Если тема или кастомный хедер не перерисовывают мини-корзину, можно принудительно вызвать обновление фрагментов после добавления товара. Это рабочий вариант, когда стандартное событие не подхватывается вашим шаблоном.
add_action( 'wp_enqueue_scripts', function () {
if ( ! function_exists( 'is_woocommerce' ) ) {
return;
}
wp_add_inline_script( 'wc-cart-fragments', "
jQuery( function( $ ) {
$( document.body ).on( 'added_to_cart', function() {
$( document.body ).trigger( 'wc_fragment_refresh' );
} );
} );
" );
}, 20 );Этот вариант полезен, если добавление в корзину проходит через AJAX, но визуально элементы шапки не меняются. Код не чинит кэш и не заменяет правильную настройку темы, но помогает в реальных кастомных сборках.
4. Проверьте, не ломает ли тема мини-корзину
Если в теме есть собственный шаблон корзины в шапке, сравните его с дефолтным поведением WooCommerce. Частая ошибка — выводить количество товаров через PHP один раз при загрузке страницы и не обновлять его через JS.
Для счетчика в шапке можно использовать стандартный фильтр фрагментов WooCommerce:
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();
return $fragments;
} );Здесь важно, чтобы селектор span.header-cart-count совпадал с разметкой в теме. Если селектор не совпадает, фрагмент обновится, но на странице ничего не изменится.
Проверка результата после внедрения
После правок не ограничивайтесь одним кликом «Добавить в корзину». Проверьте поведение в нескольких сценариях:
- добавление простого товара;
- добавление товара с вариацией;
- добавление товара на странице категории и на странице товара;
- обновление мини-корзины в шапке;
- переход на страницу корзины после добавления.
Что должно быть видно в браузере:
- в консоли нет ошибок JavaScript;
- запрос
?wc-ajax=add_to_cartвозвращает успешный ответ; - после добавления товара меняется счетчик и содержимое мини-корзины;
- при обновлении страницы корзина сохраняет товары, а не откатывается назад.
Если у вас есть доступ к DevTools, откройте вкладку Network и убедитесь, что запросы WooCommerce не получают 403, 404 или HTML-страницу вместо JSON.
Частые ошибки и как их исправить
Отключили AJAX, но проблема не ушла
Иногда администратор отключает AJAX в WooCommerce, чтобы «убрать конфликт», но корзина все равно не обновляется. Это значит, что проблема не в AJAX как таковом, а в кэше, теме или JS-оптимизации. Отключение AJAX — не универсальный фикс.
Очистили кэш, но ничего не изменилось
Если кэш-плагин очищен, а проблема осталась, проверьте серверный кэш, CDN и браузерный кэш. На практике именно CDN и агрессивная минификация чаще всего сохраняют старую версию скриптов.
Счетчик обновляется, а мини-корзина нет
Это обычно означает, что обновляется только один фрагмент, а HTML мини-корзины не попадает в список фрагментов. Нужно либо вернуть стандартную разметку WooCommerce, либо добавить свой фрагмент через woocommerce_add_to_cart_fragments.
После оптимизации JS перестала работать кнопка «Добавить в корзину»
Частая причина — отложенная загрузка или объединение скриптов, из-за чего WooCommerce не видит зависимости. Для проверки временно отключите:
- defer для JS;
- delay JavaScript execution;
- объединение файлов JS;
- lazy load для скриптов WooCommerce.
Что делать, если проблема появляется только на мобильных
На мобильных часто всплывает отдельная версия шапки или мини-корзины. Если десктоп работает, а мобильная корзина не обновляется, ищите:
- дублирующуюся разметку в мобильном хедере;
- отдельные скрипты темы для мобильного меню;
- скрытые элементы, которые не получают обновленные фрагменты;
- разные классы для одного и того же блока корзины.
В таких случаях полезно сравнить DOM на десктопе и мобильном, а не только смотреть на внешний вид.
Практические советы по безопасности и производительности
Не стоит лечить проблему полным отключением защитных или ускоряющих плагинов на постоянной основе. Лучше точечно исключить WooCommerce-страницы и AJAX-эндпоинты из кэша и оптимизации.
- не кэшируйте корзину и checkout;
- не объединяйте без проверки скрипты WooCommerce с чужими библиотеками;
- не удаляйте
wc-cart-fragments, если мини-корзина зависит от него; - после обновления темы повторно проверьте хедер и шаблоны корзины;
- если используете CDN, добавьте исключения для WooCommerce AJAX.
Если нужен более системный аудит дублей, кэша и лишних нагрузок на сайте, имеет смысл посмотреть в сторону инструментов вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpboard.ru&utm_medium=article&utm_campaign=woocommerce-ne-obnovlyaetsya-korzina-posle-dobavleniya-tovara. Но даже с таким плагином правила для WooCommerce остаются теми же: корзина, оформление и AJAX должны быть исключены из агрессивной оптимизации.
Если после всех проверок корзина по-прежнему не обновляется, следующий шаг — отключать плагины и тему по одному, пока не найдете конкретный конфликт. В WooCommerce это быстрее и надежнее, чем пытаться «угадать» проблему по симптомам.