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