WooCommerce Cart Fragments — механизм классической мини-корзины, который обновляет её содержимое через AJAX без полной перезагрузки страницы. На старых магазинах именно запрос get_refreshed_fragments нередко оказывается среди самых частых обращений к admin-ajax.php.
Сам по себе Cart Fragments не является ошибкой. Проблема появляется, когда скрипт выполняется на страницах, где мини-корзина не используется, тема принудительно подключает его глобально или сервер не справляется с большим количеством динамических запросов.
Разберём, как работает wc-cart-fragments, что изменилось в современных версиях WooCommerce и как оптимизировать его без поломки корзины.
Что делает wc-cart-fragments
Классический Cart Fragments использует WordPress AJAX API для получения актуального HTML мини-корзины. Когда покупатель добавляет или удаляет товар, WooCommerce отправляет запрос и заменяет нужные фрагменты страницы свежими данными.
Официальная документация WooCommerce указывает несколько ситуаций, когда может выполняться обновление:
- после событий
wc_fragment_refreshилиupdated_wc_div; - после изменения корзины;
- при восстановлении страницы из истории браузера;
- периодически для давно открытой вкладки;
- в отдельных сценариях WordPress Customizer.
Цель простая: пользователь должен видеть актуальное количество товаров и сумму даже на странице, которая сама по себе могла быть закэширована.
Почему get_refreshed_fragments создаёт нагрузку
Статическая страница хорошо обслуживается page cache или CDN. Но AJAX-запрос корзины персонализирован под сессию пользователя, поэтому его нельзя бездумно отдавать из общего кэша.
На посещаемом магазине это создаёт цепочку: браузер загружает страницу, JavaScript запускает обновление корзины, PHP поднимает WordPress и WooCommerce, читает сессию, формирует mini-cart и возвращает JSON.
Если такие запросы идут на каждой странице и от каждого посетителя, они могут заметно увеличивать PHP workers, CPU и обращения к базе. Особенно это видно на дешёвом shared-хостинге или при агрессивном бот-трафике.
Поэтому ускорение сайта нельзя сводить к установке кэширующего плагина. При оптимизации WordPress нужно смотреть реальные запросы, PHP-профиль и поведение корзины.
Что изменилось после WooCommerce 7.8
WooCommerce изменил глобальное подключение Cart Fragments начиная с версии 7.8. Скрипт больше не должен автоматически подключаться на каждом маршруте магазина только потому, что активен WooCommerce.
Теперь он в основном загружается, когда на странице действительно присутствует классический Cart Widget, когда сторонний скрипт объявил wc-cart-fragments зависимостью или когда тема/плагин подключает его вручную.
Это важный момент: если магазин работает на актуальной версии WooCommerce, а get_refreshed_fragments всё равно появляется абсолютно везде, сначала нужно найти кто именно возвращает глобальное подключение. Простое отключение скрипта маскирует причину.
Как проверить Cart Fragments в браузере
- Откройте сайт в приватном окне браузера.
- Запустите DevTools → Network.
- Отфильтруйте запросы по
admin-ajaxилиfragment. - Откройте обычную информационную страницу, где корзина не нужна.
- Повторите тест на каталоге, карточке товара и корзине.
- Добавьте товар и убедитесь, что mini-cart обновился.
Если запрос появляется только там, где работает классическая мини-корзина, это ожидаемое поведение. Если он идёт на каждой странице, проверьте тему, header builder, Elementor-виджеты и плагины корзины.
Не путайте Cart Fragments с Heartbeat API
Оба механизма могут обращаться к admin-ajax.php, но решают разные задачи. WordPress Heartbeat используется в админке для автосохранения, блокировки записей и фоновой синхронизации. Cart Fragments работает на фронтенде магазина и связан с корзиной.
Поэтому совет «отключить admin-ajax» технически неверен: это endpoint для разных функций. Нужно смотреть параметр action. Отдельно про Heartbeat разобрано в статье Heartbeat API WordPress и нагрузку admin-ajax.
Когда Cart Fragments можно ограничить
Если классическая мини-корзина нужна только на WooCommerce-страницах, выполнение fragments можно ограничить условно. В официальном developer guide WooCommerce приведён подход через фильтр woocommerce_get_script_data.
add_filter( 'woocommerce_get_script_data', function( $script_data, $handle ) {
if ( 'wc-cart-fragments' === $handle ) {
if ( is_woocommerce() || is_cart() || is_checkout() ) {
return $script_data;
}
return null;
}
return $script_data;
}, 10, 2 );
Этот вариант не нужно копировать вслепую. Если mini-cart расположен в глобальном header и должен обновляться на блоге, лендинге или кастомной странице, ограничение приведёт к устаревшему количеству товаров.
Сначала определите реальные страницы, где нужна динамическая корзина, и только потом задавайте условия.
Почему полное dequeue может сломать магазин
В интернете часто советуют удалить wc-cart-fragments через wp_dequeue_script(). Это действительно убирает запросы, но цена может оказаться выше выигрыша.
После жёсткого отключения возможны симптомы:
- счётчик корзины не меняется после Add to Cart;
- сумма в header остаётся старой;
- мини-корзина показывает товар после его удаления;
- закэшированная страница отображает пустую корзину пользователю с товарами;
- кастомная тема перестаёт реагировать на WooCommerce JS events.
Если магазин использует AJAX Add to Cart, обязательно проверяйте обновление header после каждого изменения.
Mini-Cart Block как современная альтернатива
WooCommerce рекомендует разработчикам переходить с классического Mini-Cart Widget на Mini-Cart Block. Блок использует более современный подход и не зависит от старого Cart Fragments API.
Для block theme переход обычно проще: mini-cart можно добавить в header через Site Editor. В classic theme возможны варианты через widget area или программную вставку блока, но нужно отдельно проверить стили и совместимость шаблона.
Переход особенно полезен, если старый header построен вокруг виджета, который вынуждает подключать fragments на всём сайте.
Page cache, CDN и мини-корзина
Основная причина существования динамического обновления — конфликт персональной корзины с общим page cache. Главная страница может быть одинаковой для тысяч посетителей, но корзина у каждого своя.
Нельзя просто закэшировать HTML mini-cart на CDN как общий фрагмент. Иначе один пользователь потенциально увидит состояние, которое не соответствует его сессии.
Безопасная архитектура разделяет:
- общий HTML страницы — максимально кэшируемый;
- персональные данные корзины — динамические;
- cart и checkout — исключённые из полного page cache;
- AJAX/Store API — не подменяемые общим HTML-кэшем.
Что проверить в теме и плагинах
Если fragments работает глобально, найдите регистрацию зависимости wc-cart-fragments в коде темы и активных плагинов. Отдельно проверьте header builder: визуально простой значок корзины может внутри использовать старый WooCommerce widget.
Также стоит проверить:
- кастомный
wp_enqueue_script; - плагины side cart и floating cart;
- Elementor/WPBakery header templates;
- старые child-theme overrides;
- JS-код, вручную вызывающий
wc_fragment_refresh; - зависимости собственных скриптов от
wc-cart-fragments.
При доработке WooCommerce лучше убрать первопричину глобального подключения, чем накладывать ещё один сниппет поверх старого кода.
Как измерить эффект оптимизации
После изменений сравните не только PageSpeed. Cart Fragments — серверная динамика, поэтому важнее реальные показатели:
- число запросов
get_refreshed_fragments; - TTFB AJAX-ответа;
- PHP CPU и количество занятых workers;
- slow log PHP-FPM;
- время SQL-запросов во время обновления корзины;
- ошибки 429/502/504 под нагрузкой;
- корректность mini-cart после add/remove.
Хорошая оптимизация уменьшает ненужные динамические запросы и при этом сохраняет пользовательскую функциональность.
Чек-лист безопасной оптимизации
- обновите WooCommerce и проверьте поведение на staging;
- найдите страницы, где реально загружается
wc-cart-fragments; - определите, используется ли классический Mini-Cart Widget;
- проверьте тему и плагины на ручную зависимость;
- не отключайте весь
admin-ajax.php; - если ограничиваете fragments — протестируйте все страницы с глобальным header;
- рассмотрите Mini-Cart Block;
- после изменений проверьте add/remove, cart, checkout и browser back;
- сравните серверную нагрузку до и после.
Итог
wc-cart-fragments нужен классической мини-корзине WooCommerce для актуализации данных пользователя. В старых конфигурациях он действительно может создавать заметную нагрузку через admin-ajax.php, но современный WooCommerce уже не подключает его глобально без причины.
Поэтому правильная стратегия — не «выключить Cart Fragments», а выяснить, где и зачем он загружается, ограничить лишние сценарии и по возможности перейти на современный Mini-Cart Block.
Если магазин тормозит из-за AJAX, PHP workers или нестандартной корзины, A.S Groups может провести диагностику и точечную оптимизацию. Для оценки можно прислать ссылку на магазин и описание симптомов.
Обсуждение
Вопросы и комментарии
Можно уточнить детали статьи или поделиться своим опытом. Первый комментарий проходит проверку.