Если на сайте с WooCommerce в панели разработчика видно регулярные запросы к ?wc-ajax=get_refreshed_fragments или похожую нагрузку от блоков корзины, это обычно означает, что мини-корзина и связанные скрипты обновляются чаще, чем нужно. На небольшом магазине это может быть незаметно, но на страницах с высоким трафиком лишние AJAX-запросы быстро становятся лишней нагрузкой на PHP и базу.
Ниже разберём, как понять, действительно ли проблема в cart fragments, какие есть безопасные способы их отключить и как проверить, что после правки ничего не сломалось.
Когда cart fragments действительно мешают
Сначала стоит убедиться, что вы боретесь именно с причиной, а не с симптомом. В WooCommerce запросы fragments чаще всего всплывают на страницах, где в шапке есть мини-корзина, виджет корзины или блоки WooCommerce, которые завязаны на обновление состояния корзины через AJAX.
Что смотреть в браузере и на сервере
Откройте DevTools в браузере, вкладку Network, и обновите страницу. Если после загрузки вы видите повторяющиеся запросы к wc-ajax=get_refreshed_fragments, а на сервере в логах растёт количество обращений к admin-ajax.php или ?wc-ajax=..., это уже повод проверить настройку.
Полезно также посмотреть:
- какие страницы чаще всего вызывают fragments — главная, каталог, карточка товара, блог;
- есть ли в шапке мини-корзина или блок корзины из WooCommerce Blocks;
- не подключает ли тема или плагин отдельный скрипт для обновления корзины;
- не растёт ли TTFB именно на страницах с большим количеством посетителей.
Когда отключать не стоит
Если у вас активно используется мини-корзина, а покупатели часто добавляют товары без перехода в корзину, полное отключение fragments может ухудшить UX. В таком случае лучше сначала попробовать точечное отключение на страницах, где обновление не нужно, или заменить тяжёлую реализацию мини-корзины на более лёгкую.
| Подход | Когда подходит | Риск |
|---|---|---|
| Отключить через код | Fragments не нужны на части страниц или мини-корзина не используется | Можно сломать динамическое обновление корзины |
| Оставить как есть | Корзина должна обновляться сразу после добавления товара | Лишняя нагрузка на сервер |
| Оптимизировать тему/шаблон | Fragments нужны, но запросов слишком много | Нужно разбираться с фронтендом и разметкой |
Как отключить WooCommerce Blocks Cart Fragments через код
Если задача — убрать именно лишние запросы, а не сломать корзину, начните с отключения скрипта на тех страницах, где он не нужен. Самый безопасный вариант — не трогать весь WooCommerce целиком, а снять только фронтенд-скрипт fragments там, где мини-корзина не отображается.
Вариант 1: отключить скрипт на некоммерческих страницах
add_action( 'wp_enqueue_scripts', function () {
if ( is_admin() ) {
return;
}
// Оставляем fragments только там, где они действительно нужны.
if ( ! is_cart() && ! is_checkout() && ! is_product() ) {
wp_dequeue_script( 'wc-cart-fragments' );
wp_deregister_script( 'wc-cart-fragments' );
}
}, 20 );Этот вариант подходит, если на части сайта мини-корзина не критична. Но если тема выводит корзину в шапке на всех страницах, сначала проверьте, не исчезнет ли счётчик товаров и не перестанет ли обновляться содержимое мини-корзины.
Вариант 2: отключить fragments только для гостей
Иногда нагрузку создают именно незалогиненные посетители, а для авторизованных пользователей обновление корзины нужно оставить. Тогда можно ограничить отключение только гостями:
add_action( 'wp_enqueue_scripts', function () {
if ( is_admin() || is_user_logged_in() ) {
return;
}
if ( ! is_cart() && ! is_checkout() ) {
wp_dequeue_script( 'wc-cart-fragments' );
wp_deregister_script( 'wc-cart-fragments' );
}
}, 20 );Это не универсальная формула, но на контентных сайтах с редкими покупками она часто даёт более предсказуемый результат, чем полное отключение для всех.
Вариант 3: убрать автозагрузку fragments из шапки
Если проблема не в самом скрипте, а в том, что тема постоянно выводит мини-корзину, иногда разумнее изменить шаблон шапки. Например, заменить динамический блок корзины на обычную ссылку в корзину. Это уже правка темы, а не просто отключение скрипта, зато она убирает источник запросов, а не маскирует его.
Если вы используете дочернюю тему, проверьте, где именно подключается мини-корзина: в header.php, через хук темы или через блоки WooCommerce. В некоторых случаях проще убрать виджет, чем бороться с последствиями его работы.
Диагностика после правки: как понять, что всё сработало
После внесения изменений не ограничивайтесь визуальной проверкой. Нужно убедиться, что скрипт действительно не грузится там, где вы его отключили, и что корзина не сломалась на ключевых сценариях.
Проверка в браузере
- Откройте страницу каталога и обновите её с очисткой кэша.
- В Network проверьте, что запросов к
wc-ajax=get_refreshed_fragmentsбольше нет или их стало заметно меньше. - Добавьте товар в корзину и убедитесь, что счётчик и мини-корзина ведут себя ожидаемо.
- Перейдите на страницу корзины и оформления заказа: там функциональность должна сохраняться.
Проверка на сервере
Если у вас есть доступ к логам или APM, сравните количество запросов до и после. Важно смотреть не только на общее число хитов, но и на повторяющиеся обращения к одному и тому же AJAX-эндпоинту. Если они исчезли на страницах каталога, а на корзине остались — это хороший признак, что отключение получилось точечным.
Частые ошибки и как их исправить
Отключили скрипт, но мини-корзина всё равно делает запросы
Значит, запросы идут не только через wc-cart-fragments. Некоторые темы и плагины добавляют собственную логику обновления корзины. В этом случае ищите подключение скриптов в исходниках темы и в списке активных плагинов, а не только в WooCommerce.
Сломался счётчик товаров в шапке
Это типичный побочный эффект полного отключения fragments. Если счётчик нужен, не отключайте скрипт глобально. Лучше ограничьте его страницами, где мини-корзина не используется, или замените шапку на более простой вариант.
После обновления WooCommerce всё вернулось
Если правка была внесена прямо в файлы плагина, она исчезнет после обновления. Используйте дочернюю тему или небольшой mu-plugin. Это стандартная ошибка, которую легко избежать, если не править ядро плагина вручную.
Отключили не тот хук или не тот handle
В WordPress важно совпадение имени скрипта. Если в коде указан неверный handle, dequeue не сработает, а вы будете искать проблему в другом месте. Для WooCommerce обычно используется wc-cart-fragments, но перед внедрением лучше проверить фактическое имя в подключаемых скриптах темы и плагинов.
Практические советы по безопасности и производительности
Любые правки, связанные с WooCommerce, лучше делать не в продакшене сразу, а сначала на staging-копии. Это особенно важно, если магазин уже принимает заказы. Отключение fragments может повлиять на пользовательский сценарий, и это нужно увидеть до публикации.
- Храните изменения в дочерней теме или mu-plugin, а не в файлах WooCommerce.
- После правки очистите кэш страницы и объектный кэш, если он есть.
- Проверьте мобильную версию отдельно: там мини-корзина часто ведёт себя иначе.
- Если в теме есть собственный AJAX для корзины, не отключайте WooCommerce fragments вслепую.
Если вам нужно не только убрать лишние запросы, но и подчистить сопутствующий мусор в теме, иногда удобнее сначала пройтись по общим проблемам оптимизации и дублирующихся скриптов. В экосистеме WPShop для этого есть Clearfy Pro, но даже с ним логику корзины всё равно стоит проверять руками, а не полагаться только на чекбоксы.
Что проверить после внедрения на реальном магазине
Финальная проверка должна быть не формальной, а прикладной. Пройдите сценарии, которые реально используют покупатели:
- открытие каталога без авторизации;
- добавление товара в корзину;
- обновление количества в корзине;
- переход к оформлению заказа;
- работа мини-корзины в шапке, если она осталась.
Если все шаги проходят без ошибок, а лишние AJAX-запросы исчезли с тех страниц, где они не нужны, значит решение можно оставлять. Если же корзина стала вести себя нестабильно, не пытайтесь компенсировать это дополнительными плагинами — сначала верните исходную логику и уже потом меняйте подход точечно.