Скрипт cart-fragments в WooCommerce часто становится лишней нагрузкой на сайт: он дергает AJAX даже там, где мини-корзина не нужна, и может заметно замедлять страницы для гостей. Но отключать его вслепую нельзя — на части сайтов именно он отвечает за актуализацию мини-корзины в шапке.
Ниже разберём, как понять, нужен ли вам этот скрипт, как отключить его точечно и что проверить после внедрения. Речь именно о практическом сценарии: убрать лишние запросы, не сломав добавление товара и отображение корзины.
Когда cart fragments действительно мешает
Проблема обычно проявляется не в админке, а на публичных страницах. В DevTools или в логах сети видно повторяющиеся запросы к ?wc-ajax=get_refreshed_fragments. Они могут запускаться на каждой загрузке страницы, даже если пользователь не взаимодействует с корзиной.
Типичные симптомы
- страницы каталога и блога грузятся медленнее из-за лишнего AJAX-запроса;
- на мобильных устройствах заметна задержка в отрисовке шапки;
- в отчётах по производительности есть запросы к
wc-ajax=get_refreshed_fragmentsна страницах без корзины; - кэш страницы работает хуже, потому что часть контента обновляется динамически.
Если у вас в шапке есть мини-корзина, счётчик товаров или виджет, который должен обновляться сразу после добавления товара, отключать всё подряд не стоит. В таком случае лучше либо оставить скрипт, либо заменить логику на более точечную.
Диагностика: нужен ли вам этот скрипт вообще
Перед изменениями проверьте, где именно используется мини-корзина. Если в теме нет блока с динамическим количеством товаров, а корзина открывается только по кнопке, cart fragments часто можно убрать без последствий.
Быстрая проверка:
- Откройте главную, каталог и карточку товара в режиме инкогнито.
- Откройте DevTools → Network.
- Обновите страницу и найдите запрос
get_refreshed_fragments. - Добавьте товар в корзину и проверьте, обновляется ли счётчик в шапке.
Если счётчик не нужен или обновляется другим способом, скрипт можно отключать. Если нужен — переходите к точечной деактивации только на тех страницах, где он не даёт пользы.
Как отключить cart fragments безопасно
Самый надёжный способ — не править файлы WooCommerce, а добавить фильтр в дочернюю тему или в небольшой кастомный плагин. Так обновление магазина не затрёт изменения.
Вариант 1: отключить скрипт на не-магазинных страницах
Если мини-корзина нужна только в каталоге и карточках товара, можно отключить cart-fragments на остальных страницах:
add_action( 'wp_enqueue_scripts', function () {
if ( is_admin() ) {
return;
}
if ( ! function_exists( 'is_woocommerce' ) ) {
return;
}
if ( is_woocommerce() || is_cart() || is_checkout() ) {
return;
}
wp_dequeue_script( 'wc-cart-fragments' );
wp_deregister_script( 'wc-cart-fragments' );
}, 20 );Этот вариант подходит, если на блоге, главной или лендингах корзина не отображается. Но если тема выводит мини-корзину в общем хедере, проверьте, не пропадёт ли счётчик после добавления товара.
Вариант 2: отключить только автозапросы, оставив ручное обновление
Иногда достаточно убрать автоматический запрос при загрузке страницы, но оставить сам скрипт для сценариев, где он вызывается вручную. Для этого используют фильтр WooCommerce:
add_filter( 'woocommerce_cart_fragments_enabled', '__return_false' );Это более жёсткий вариант. Он может быть уместен, если у вас полностью кастомная корзина и мини-корзина не зависит от стандартных фрагментов WooCommerce. Если оставить его без проверки, можно получить устаревший счётчик товаров в шапке.
Вариант 3: отключить через условие по шаблону
Если проблема только на отдельных шаблонах, лучше привязаться к конкретным условиям. Например, на страницах акций или в блоге:
add_action( 'wp_enqueue_scripts', function () {
if ( is_page_template( 'templates/landing.php' ) || is_home() || is_archive() ) {
wp_dequeue_script( 'wc-cart-fragments' );
wp_deregister_script( 'wc-cart-fragments' );
}
}, 20 );Такой подход удобен, когда вы точно знаете, где мини-корзина не используется. Главное — не отключать скрипт на checkout, если там есть зависимые элементы темы или плагинов.
Сравнение подходов
| Подход | Когда использовать | Риск |
|---|---|---|
Фильтр woocommerce_cart_fragments_enabled | Мини-корзина не нужна вообще | Может сломать динамический счётчик в шапке |
wp_dequeue_script по условиям | Нужно убрать нагрузку только на части страниц | Нужно аккуратно подобрать условия |
| Оставить как есть | Мини-корзина критична для UX | Сохраняется лишний AJAX-запрос |
Проверка результата после внедрения
После изменения не ограничивайтесь визуальной проверкой. Нужны минимум три теста: сеть, корзина и кэш.
- в Network больше не должно быть запроса
get_refreshed_fragmentsна страницах, где вы его отключили; - добавление товара в корзину должно работать без ошибок;
- если мини-корзина осталась, счётчик должен обновляться там, где вы этого ожидаете;
- страницы должны открываться без JS-ошибок в консоли;
- кэш-плагин не должен конфликтовать с обновлением корзины на страницах магазина.
Полезно отдельно протестировать гостя и авторизованного пользователя. У WooCommerce поведение фрагментов иногда отличается в зависимости от сессии и кеширования.
Частые ошибки и как их исправить
Отключили скрипт на checkout
На странице оформления заказа могут быть элементы темы или плагинов, которые рассчитывают на стандартные WooCommerce-скрипты. Если после отключения появились ошибки в консоли, верните wc-cart-fragments хотя бы на checkout и cart.
Использовали фильтр без проверки темы
Если в шапке есть мини-корзина, а вы просто добавили __return_false, счётчик может перестать обновляться после добавления товара. В таком случае переходите на условное отключение по страницам.
Правили файл плагина WooCommerce
Это плохая идея: обновление плагина затрёт изменения. Используйте дочернюю тему, mu-plugin или собственный небольшой плагин для точечной логики.
Не проверили кэш
Если на сайте стоит серверный или плагинный кэш, старые фрагменты могут продолжать показываться из-за сохранённой версии страницы. После внедрения очистите кэш и проверьте сайт в приватном окне.
Что ещё стоит учесть для скорости и безопасности
Отключение cart fragments имеет смысл только в связке с нормальной настройкой кэша и минимизацией лишних скриптов. Если у вас тяжёлая тема или много сторонних виджетов, один этот шаг не решит проблему полностью, но уберёт заметный источник фоновых запросов.
Если вы регулярно чистите сайт от лишних настроек, дублей и мусорных скриптов, имеет смысл смотреть в сторону инструментов, которые помогают держать фронтенд в порядке. Например, Clearfy Pro используется именно для таких задач, когда нужно убрать лишнее без ручного ковыряния каждого шаблона. Ссылку лучше проверять по текущей документации: https://wpshop.ru/plugins/clearfy.
Но даже с плагинами правило остаётся прежним: сначала понять, где и зачем нужен скрипт, потом отключать, потом проверять. В WooCommerce это особенно важно, потому что одна и та же оптимизация на двух разных темах может дать противоположный результат.