Как отключить cart fragments в WooCommerce и не сломать обновление корзины

Скрипт cart-fragments в WooCommerce часто становится лишней нагрузкой на сайт: он дергает AJAX даже там, где мини-корзина не нужна, и может заметно замедлять страницы для гостей. Но отключать его вслепую нельзя — на части сайтов именно он отвечает за актуализацию мини-корзины в шапке.

Ниже разберём, как понять, нужен ли вам этот скрипт, как отключить его точечно и что проверить после внедрения. Речь именно о практическом сценарии: убрать лишние запросы, не сломав добавление товара и отображение корзины.

Когда cart fragments действительно мешает

Проблема обычно проявляется не в админке, а на публичных страницах. В DevTools или в логах сети видно повторяющиеся запросы к ?wc-ajax=get_refreshed_fragments. Они могут запускаться на каждой загрузке страницы, даже если пользователь не взаимодействует с корзиной.

Типичные симптомы

  • страницы каталога и блога грузятся медленнее из-за лишнего AJAX-запроса;
  • на мобильных устройствах заметна задержка в отрисовке шапки;
  • в отчётах по производительности есть запросы к wc-ajax=get_refreshed_fragments на страницах без корзины;
  • кэш страницы работает хуже, потому что часть контента обновляется динамически.

Если у вас в шапке есть мини-корзина, счётчик товаров или виджет, который должен обновляться сразу после добавления товара, отключать всё подряд не стоит. В таком случае лучше либо оставить скрипт, либо заменить логику на более точечную.

Диагностика: нужен ли вам этот скрипт вообще

Перед изменениями проверьте, где именно используется мини-корзина. Если в теме нет блока с динамическим количеством товаров, а корзина открывается только по кнопке, cart fragments часто можно убрать без последствий.

Быстрая проверка:

  1. Откройте главную, каталог и карточку товара в режиме инкогнито.
  2. Откройте DevTools → Network.
  3. Обновите страницу и найдите запрос get_refreshed_fragments.
  4. Добавьте товар в корзину и проверьте, обновляется ли счётчик в шапке.

Если счётчик не нужен или обновляется другим способом, скрипт можно отключать. Если нужен — переходите к точечной деактивации только на тех страницах, где он не даёт пользы.

Как отключить 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 это особенно важно, потому что одна и та же оптимизация на двух разных темах может дать противоположный результат.

Как закрыть дубли страниц от индексации в WordPress без поломки SEO
22.08.2026