Если в WooCommerce сайт долго грузит главную, каталог или карточку товара, а в запросах постоянно всплывает wc-ajax=get_refreshed_fragments, проблема часто не в теме и не в «тяжёлом хостинге», а в механизме Cart Fragments. Он нужен для синхронизации мини-корзины, но на части проектов создаёт лишние AJAX-запросы на каждой странице.
Отключать его «в лоб» нельзя: если у вас в шапке есть мини-корзина, счётчик товаров или виджет корзины, нужно сначала понять, где именно фрагменты используются. Иначе можно ускорить сайт ценой сломанного интерфейса.
Когда Cart Fragments действительно мешает
Cart Fragments — это скрипт WooCommerce, который обновляет фрагменты корзины через AJAX. На практике он начинает раздражать в трёх сценариях:
- на сайте много трафика на страницах, где корзина вообще не нужна;
- в шапке нет мини-корзины, но скрипт всё равно грузится;
- плагин кэширования не может нормально работать из-за постоянных AJAX-вызовов.
Если открыть DevTools → Network и обновить страницу, можно увидеть запрос к ?wc-ajax=get_refreshed_fragments. Если он есть на каждой странице, а мини-корзина не используется, это хороший кандидат на отключение.
Блок диагностики проблемы
Перед изменениями проверьте три вещи:
- Есть ли в теме элемент мини-корзины или счётчик товаров в шапке.
- Используется ли виджет WooCommerce Cart в сайдбаре или футере.
- Есть ли сторонний плагин, который завязан на обновление корзины без перезагрузки страницы.
Если хотя бы один из этих пунктов актуален, отключать Cart Fragments нужно аккуратно, с тестом на фронтенде.
Как отключить Cart Fragments без поломки корзины
Самый надёжный способ — убрать загрузку скрипта только там, где он не нужен. Для этого можно использовать фильтр woocommerce_get_script_data. Он позволяет отключить данные для скрипта wc-cart-fragments, не трогая сам WooCommerce.
Вариант через functions.php или мини-плагин
add_filter( 'woocommerce_get_script_data', function( $params, $handle ) {
if ( 'wc-cart-fragments' === $handle ) {
return null;
}
return $params;
}, 10, 2 );Этот вариант подходит, если вам не нужна динамическая мини-корзина на всех страницах. Но если корзина в шапке есть, лучше ограничить отключение только страницами, где она не используется.
Отключение только на не-woocommerce страницах
add_action( 'wp_enqueue_scripts', function() {
if ( function_exists( 'is_woocommerce' ) && ! is_woocommerce() && ! is_cart() && ! is_checkout() ) {
wp_dequeue_script( 'wc-cart-fragments' );
wp_deregister_script( 'wc-cart-fragments' );
}
}, 100 );Этот способ проще, но у него есть компромисс: если у вас мини-корзина показывается, например, в блоге или на главной, она перестанет обновляться без перезагрузки страницы.
Что выбрать: код, плагин или компромисс
| Подход | Когда подходит | Минус |
|---|---|---|
| Код через фильтр | Если нужна точечная настройка и контроль | Нужно тестировать тему и шапку |
| Отключение через dequeue | Если Cart Fragments не нужен вне магазина | Может сломать динамическую мини-корзину |
| Плагин оптимизации | Если уже используете комплексную чистку фронтенда | Легко получить конфликт настроек |
Если у вас уже стоит плагин оптимизации, например Clearfy Pro, проверьте, нет ли там отдельной опции для отключения Cart Fragments или оптимизации WooCommerce-скриптов. Но даже в этом случае лучше понимать, что именно выключается, а не полагаться на «ускорение в один клик».
Пошаговая проверка после внедрения
После правки не ограничивайтесь открытием главной страницы. Проверка должна быть практической:
- откройте главную, каталог, карточку товара и страницу блога;
- посмотрите Network в DevTools и убедитесь, что запрос
wc-ajax=get_refreshed_fragmentsисчез там, где он не нужен; - добавьте товар в корзину и проверьте, обновляется ли счётчик, если он у вас есть;
- очистите кэш плагина и серверный кэш, если они используются;
- проверьте мобильную версию отдельно, потому что шапка и мини-корзина там часто ведут себя иначе.
Если после отключения корзина перестала обновляться на странице оформления заказа или в мини-корзине, значит, отключение слишком широкое. В этом случае возвращайтесь к более точечному варианту через фильтр и ограничивайте его только некоммерческими страницами.
Частые ошибки и как их исправить
Скрипт отключили, но запросы остались
Обычно это означает, что Cart Fragments грузит не WooCommerce, а тема или сторонний плагин. Проверьте исходный код страницы и список подключённых скриптов через Query Monitor или DevTools. Иногда дублирующий запрос создаёт кастомная мини-корзина.
Мини-корзина перестала обновляться
Значит, вы отключили wc-cart-fragments там, где он был нужен. Верните скрипт и ограничьте отключение только страницами без корзины, либо оставьте его на страницах магазина и оформления заказа.
Кэш стал работать хуже, а не лучше
Так бывает, если на странице остались другие динамические блоки: попапы, счётчики, AJAX-фильтры. Cart Fragments — не единственный источник проблем. В таком случае нужно смотреть весь фронтенд, а не только WooCommerce.
Изменения внесли в тему и потеряли после обновления
Не правьте functions.php родительской темы. Используйте дочернюю тему или небольшой mu-plugin. Это особенно важно на магазинах, где обновления темы и WooCommerce идут регулярно.
Практические советы по безопасности и производительности
Если отключаете Cart Fragments ради ускорения, не делайте это вслепую. Сначала измерьте базовую нагрузку: время ответа страницы, число запросов, наличие AJAX-вызова корзины. После правки сравните только те же страницы и только в тех же условиях.
Для магазинов с высокой нагрузкой полезно дополнительно:
- убрать лишние скрипты WooCommerce на страницах, где магазин не используется;
- проверить, не дублируется ли мини-корзина в теме и плагине;
- очистить автозагрузку опций, если проект давно живёт и база разрослась;
- не смешивать несколько плагинов, которые одновременно оптимизируют JS WooCommerce.
Если вам нужен не просто точечный фикс, а системная чистка фронтенда WooCommerce, удобнее сначала собрать список активных скриптов и только потом отключать лишнее. Иначе легко убрать не то, что тормозит, а то, что обеспечивает работу корзины.
Как понять, что решение сработало
Результат считается нормальным, если выполняются все пункты:
- на страницах без корзины запрос
get_refreshed_fragmentsбольше не появляется; - мини-корзина и счётчик товаров работают на тех страницах, где вы их оставили;
- страницы магазина и карточки товара открываются без ошибок JavaScript;
- кэширование не конфликтует с WooCommerce-страницами;
- после очистки кэша поведение не меняется.
Если всё это выполнено, Cart Fragments можно считать отключённым безопасно, а не просто «вырубленным ради галочки».