WooCommerce может подключать JavaScript-файл `wc-cart-fragments.js` на многих страницах сайта. Скрипт периодически проверяет состояние корзины и отправляет AJAX-запросы к `?wc-ajax=get_refreshed_fragments`, чтобы обновить мини-корзину, количество товаров и общую сумму заказа.
Если мини-корзина не используется на конкретной странице, такие запросы могут быть лишними. Особенно заметно это на сайтах с большим трафиком, где каждый дополнительный PHP-запрос создает нагрузку на сервер, object cache и базу данных. При этом бездумное глобальное отключение Cart Fragments может сломать мини-корзину или кастомную логику корзины.
Что такое WooCommerce Cart Fragments
Cart Fragments — это механизм WooCommerce для динамического обновления частей страницы, связанных с корзиной. Чаще всего речь идет о классическом виджете мини-корзины: количестве товаров, списке позиций и общей сумме.
После добавления товара через AJAX WooCommerce может обновить эти элементы без полной перезагрузки страницы. Для этого браузер обращается к специальному endpoint и получает HTML-фрагменты, которые нужно заменить в DOM.
Проблема возникает, когда скрипт загружается на страницах, где нет мини-корзины или другого компонента, использующего этот механизм. В таком случае сайт может выполнять периодические запросы без практической пользы для посетителя.
- за логику обычно отвечает файл `wc-cart-fragments.js`;
- типичный AJAX-запрос — `?wc-ajax=get_refreshed_fragments`;
- основные кандидаты на оптимизацию — страницы без мини-корзины и связанных кастомных компонентов.
Почему не стоит отключать скрипт глобально
Глобальное удаление `wc-cart-fragments` может показаться простым решением, но оно не учитывает фактическую структуру магазина. На одной странице мини-корзины может не быть в видимой части шаблона, однако она может открываться в мобильном меню, боковой панели, header или popup.
Помимо стандартного виджета WooCommerce, Cart Fragments иногда используют темы, плагины, кастомные шаблоны и собственные скрипты. Поэтому перед оптимизацией нужно определить, где именно корзина должна обновляться динамически.
Также не следует путать Cart Fragments с самой функциональностью страниц корзины и оформления заказа. Отключение конкретного JavaScript-файла не должно механически применяться ко всем сценариям WooCommerce.
- не удаляйте скрипт без проверки мини-корзины на десктопных и мобильных устройствах;
- учитывайте мини-корзину в шапке, меню, drawer-панели и popup;
- проверьте, не вызывает ли ее код темы или сторонний плагин.
Безопасное выборочное отключение через functions.php
Практичный подход — оставить Cart Fragments на странице корзины, странице оформления заказа и там, где активен стандартный виджет мини-корзины. На других страницах скрипт можно удалить из очереди.
Код нужно добавить в дочернюю тему или небольшой собственный функциональный плагин. Не рекомендуется вносить его непосредственно в файлы родительской темы, поскольку обновление темы может перезаписать изменения.
- сделайте резервную копию или подготовьте способ быстрого отката;
- добавляйте код в среду, где его можно безопасно протестировать;
- приоритет `100` помогает выполнить dequeue после большинства стандартных подключений скрипта.
add_action('wp_enqueue_scripts', function () {
if (
! is_cart() &&
! is_checkout() &&
! is_active_widget(false, false, 'woocommerce_widget_cart', true)
) {
wp_dequeue_script('wc-cart-fragments');
}
}, 100);
Как работает эта проверка
`is_cart()` и `is_checkout()` оставляют скрипт на ключевых страницах магазина. Проверка `is_active_widget()` определяет, активен ли стандартный виджет WooCommerce с ID `woocommerce_widget_cart` в зарегистрированной области виджетов.
Условие использует логику «и»: скрипт удаляется только тогда, когда текущая страница не является корзиной, не является checkout и на ней не активен стандартный виджет мини-корзины.
- если мини-корзина реализована блоком или собственным шаблоном, эта проверка может ее не обнаружить;
- если тема подключает скрипт после выполнения этого кода, может потребоваться другое решение или более поздний хук;
- для нестандартной мини-корзины лучше сначала выяснить ее зависимости.
Когда этот подход нужно изменить
Приведенный пример ориентирован на классический виджет WooCommerce. Он не является универсальным способом определить все компоненты корзины. Современная тема может использовать блоки WooCommerce, собственный AJAX endpoint или JavaScript, который лишь частично зависит от Cart Fragments.
Если после отключения исчезает количество товаров в шапке, не обновляется сумма или не работает открытие мини-корзины, скрипт нужно вернуть на соответствующих страницах. Для кастомного компонента можно оставить `wc-cart-fragments.js` или реализовать отдельный endpoint, который будет возвращать только необходимые данные.
Не стоит добавлять в исключения все страницы без анализа. Лучше определить конкретные шаблоны, где пользователь взаимодействует с корзиной, и сохранить функциональность именно там.
- изучите документацию темы и плагина, если мини-корзина не является стандартным виджетом;
- не удаляйте зависимости скрипта, если сторонний код ожидает его наличия;
- для сложных магазинов рассмотрите условное подключение собственного JavaScript вместо общего Cart Fragments.
Как протестировать сайт после изменений
Тестирование нужно выполнять в режиме гостя и в новой сессии браузера. Кэшированные cookies и ранее загруженные скрипты могут создать впечатление, что все работает, хотя реальный пользователь увидит другое поведение.
Проверьте не только главную страницу, но и все шаблоны, где покупатель может добавлять товар или открывать корзину.
- добавьте товар в корзину из каталога и со страницы товара;
- проверьте обновление количества, удаление товара и переход к checkout;
- проверьте применение и удаление купона;
- откройте мини-корзину на десктопном и мобильном устройстве;
- проверьте товары с вариациями, если магазин их продает;
- убедитесь, что после входа пользователя или смены валюты корзина не теряет данные.
Проверка в DevTools
Откройте Developer Tools браузера, перейдите на вкладку Network и перезагрузите страницу. В фильтре запросов найдите `get_refreshed_fragments` или `wc-ajax`.
На страницах без мини-корзины лишние запросы должны исчезнуть. При этом на страницах, где требуется динамическое обновление корзины, они могут остаться — это ожидаемое поведение.
- проверьте также вкладку Console на наличие JavaScript-ошибок;
- убедитесь, что файл `wc-cart-fragments.js` не нужен другому компоненту;
- тестируйте страницы после очистки page cache, CDN-кэша и кэша браузера.
Типичные ошибки при оптимизации
Самая распространенная ошибка — удалить `wc-cart-fragments` везде, ориентируясь только на несколько лишних запросов в Network. Если на сайте есть мини-корзина, проблему производительности нужно решать не ее поломкой, а более точным определением условий загрузки.
Еще одна ошибка — проверять изменения только для администратора. Авторизованный администратор может видеть другую версию страницы из-за кэша, дополнительных панелей или отличающейся логики темы. Основной сценарий нужно тестировать как обычный посетитель.
После изменения кода важно очистить кэш страниц. В противном случае часть пользователей будет получать старую HTML-версию, а часть — новую, что усложнит диагностику.
- не полагайтесь только на оценку PageSpeed без проверки функциональности;
- не копируйте код без анализа кастомного header и мобильного меню;
- не редактируйте файлы плагина WooCommerce напрямую;
- не считайте отсутствие одного AJAX-запроса доказательством того, что вся корзина работает корректно.
Частые вопросы
Можно ли полностью отключить WooCommerce Cart Fragments?
Да, но только если сайт не использует классическую или кастомную мини-корзину, которая зависит от этого скрипта. Для большинства магазинов безопаснее отключать его выборочно на страницах, где он не нужен.
Нужно ли отключать Cart Fragments на странице корзины?
Обычно страницу корзины лучше оставить в исключениях. На ней пользователь изменяет количество товаров, удаляет позиции и применяет купоны, поэтому любое вмешательство нужно проверять особенно тщательно.
Почему после dequeue мини-корзина перестала обновляться?
Скорее всего, мини-корзина или кастомный компонент используют `wc-cart-fragments.js`, даже если стандартный виджет не определяется через `is_active_widget()`. Верните скрипт и проверьте зависимости темы, блоков и плагинов.
Исчезнут ли все запросы WooCommerce после отключения Cart Fragments?
Нет. Другие AJAX-запросы WooCommerce, запросы checkout, обновление вариаций или собственная логика темы могут остаться. Цель оптимизации — убрать только ненужные запросы Cart Fragments.
Вывод
Оптимизация WooCommerce Cart Fragments должна быть условной, а не глобальной. Сначала определите, где на сайте используется мини-корзина, затем отключите скрипт только на страницах без соответствующей функциональности.
После внедрения проверьте магазин как гость: добавление товаров, изменение количества, купоны, мини-корзину и checkout. В DevTools убедитесь, что запросы `get_refreshed_fragments` исчезли только там, где они действительно не нужны.