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

Если в отчётах по производительности вы видите лишние запросы к /?wc-ajax=get_refreshed_fragments, это почти всегда означает одно: WooCommerce регулярно обновляет мини-корзину через cart fragments. На небольшом магазине это может быть незаметно, но на тяжёлой теме или при большом трафике этот механизм начинает съедать ресурсы даже на страницах, где корзина пользователю не нужна.

Важно не путать проблему с «отключить AJAX в WooCommerce вообще». Речь здесь именно о cart fragments — механизме, который обновляет мини-корзину и счётчик товаров. Полностью рубить AJAX в WooCommerce не стоит: сломаете часть сценариев оформления заказа и обновления интерфейса. Ниже — рабочий способ отключить лишнюю нагрузку и не потерять базовую функциональность.

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

Проверять стоит не по ощущениям, а по фактам. Откройте DevTools в браузере или посмотрите waterfall в любом профилировщике запросов. Если на обычных страницах сайта есть повторяющиеся обращения к get_refreshed_fragments, а мини-корзина при этом не используется в шапке, механизм работает впустую.

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

  • страницы каталога и блога грузят запросы WooCommerce, хотя пользователь ещё не открывал корзину;
  • в Lighthouse или WebPageTest видно лишний XHR-запрос;
  • на слабом хостинге растёт TTFB из-за частых обращений к WooCommerce AJAX;
  • мини-корзина в шапке обновляется, но реальной пользы от этого обновления нет.

Что именно отключаем

WooCommerce подгружает скрипт wc-cart-fragments, который отвечает за обновление фрагментов корзины. Если у вас нет мини-корзины в шапке, либо она не критична в реальном времени, этот скрипт можно отключить на большинстве страниц. Но делать это нужно аккуратно: не на всех страницах и не вслепую.

Сначала сравните варианты решения

ПодходЧто даётМинус
Оставить как естьНичего не ломаетЛишняя нагрузка на фронтенде
Отключить только wc-cart-fragmentsСнимает часть запросов WooCommerceМини-корзина перестаёт обновляться автоматически
Отключить через плагин оптимизацииБыстро без кодаНужно проверять, не конфликтует ли с темой

Если вы хотите контролировать поведение точечно, лучше использовать код. Если нужен быстрый и безопасный путь без правки темы, можно посмотреть на Clearfy Pro: там есть инструменты для отключения лишних скриптов и дублей, но всё равно придётся проверить, не завязана ли тема на живое обновление корзины. Ссылка уместна только как вариант, а не как обязательное решение: Clearfy Pro.

Как отключить cart fragments точечно

Самый предсказуемый способ — убрать скрипт только там, где он не нужен. Для этого используйте фильтр woocommerce_get_script_data. Он позволяет вернуть null для wc-cart-fragments, и WooCommerce не будет инициализировать лишний AJAX на фронтенде.

add_filter( 'woocommerce_get_script_data', function( $params, $handle ) {
    if ( 'wc-cart-fragments' === $handle ) {
        // Не отключаем на странице корзины и оформления заказа,
        // чтобы не ломать сценарии, где корзина должна обновляться.
        if ( function_exists( 'is_cart' ) && ( is_cart() || is_checkout() ) ) {
            return $params;
        }

        return null;
    }

    return $params;
}, 10, 2 );

Этот вариант хорош тем, что не трогает WooCommerce целиком. На страницах корзины и checkout скрипт остаётся, а на остальных страницах не создаёт лишнюю нагрузку. Код лучше добавлять в дочернюю тему или в небольшой mu-plugin, а не в основной файл темы.

Если мини-корзина в шапке не нужна вообще

Тогда можно отключить и сам скрипт, и его зависимость от шаблона. Но перед этим проверьте, не использует ли тема счётчик товаров в шапке или всплывающий мини-cart. Если использует, интерфейс перестанет обновляться без перезагрузки страницы.

add_action( 'wp_enqueue_scripts', function() {
    if ( is_admin() ) {
        return;
    }

    // Не отключаем на корзине и оформлении заказа.
    if ( function_exists( 'is_cart' ) && ( is_cart() || is_checkout() ) ) {
        return;
    }

    wp_dequeue_script( 'wc-cart-fragments' );
    wp_deregister_script( 'wc-cart-fragments' );
}, 100 );

Этот способ жёстче. Он подходит, если вы точно знаете, что тема не зависит от cart fragments на страницах каталога, блога и лендингов. Если сомневаетесь, начинайте с фильтра woocommerce_get_script_data — он менее агрессивный.

Пошаговая схема внедрения

  1. Сделайте резервную копию файла, куда будете добавлять код, или работайте через дочернюю тему.
  2. Проверьте, где именно у вас выводится мини-корзина: в шапке, в оффканвасе, в сайдбаре.
  3. Определите, нужен ли живой счётчик товаров на всех страницах или только на checkout.
  4. Добавьте фильтр для wc-cart-fragments и очистите кэш сайта и браузера.
  5. Откройте главную, каталог и карточку товара, затем проверьте, исчез ли запрос get_refreshed_fragments.
  6. Перейдите в корзину и на оформление заказа, убедитесь, что там поведение не сломалось.
Чек-лист перед публикацией:
  • мини-корзина не пропала из шапки там, где она нужна;
  • товар добавляется в корзину;
  • страница корзины обновляет содержимое после изменения количества;
  • на обычных страницах нет лишних запросов к get_refreshed_fragments;
  • кэш-плагин не переопределяет поведение скриптов.

Как проверить, что решение сработало

Проверка должна быть двойной: в браузере и на сервере. В DevTools откройте вкладку Network, обновите страницу и найдите запросы к ?wc-ajax=get_refreshed_fragments. На страницах, где вы отключили cart fragments, их быть не должно. На корзине и checkout — допустимо, если вы оставили их там включёнными.

Дополнительно можно посмотреть исходный HTML страницы. Если скрипт wc-cart-fragments больше не подключается, значит WooCommerce не будет запускать обновление фрагментов на фронтенде. Но не делайте вывод только по HTML: иногда скрипт подгружается через тему или плагин оптимизации.

Что ещё стоит проверить после правки

  • не сломался ли счётчик товаров в шапке;
  • не исчезает ли мини-корзина после добавления товара;
  • не конфликтует ли отключение с отложенной загрузкой JS;
  • не кешируется ли корзина для авторизованных пользователей.

Частые ошибки и как их исправить

Отключили скрипт на всех страницах без исключений

В результате мини-корзина перестаёт обновляться и пользователь видит старое количество товаров. Исправление простое: не трогайте is_cart() и is_checkout(), а если тема использует мини-cart в шапке, оставьте скрипт активным хотя бы на страницах каталога и товара.

Добавили код в родительскую тему

После обновления темы правка исчезнет. Для таких изменений используйте дочернюю тему или mu-plugin. Это не вопрос удобства, а вопрос предсказуемости поддержки.

Сломали обновление корзины из-за кэширования

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

Отключили не тот скрипт

Иногда путают wc-cart-fragments с другими скриптами WooCommerce. Если после правки ломается добавление в корзину или оформление заказа, значит вы задели не тот handle или слишком агрессивно выгрузили зависимости. Возвращайте изменения и проверяйте по одному шагу.

Практические советы по безопасности и производительности

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

Если у вас много страниц без корзины и шапка не зависит от live-обновления, отключение cart fragments обычно даёт более чистый фронтенд. Но если магазин активно использует мини-корзину как часть UX, лучше не убирать её полностью, а ограничиться страницами, где она не нужна. Это тот случай, когда небольшая точечная настройка полезнее, чем «ускорить всё сразу».

Для магазинов на WooCommerce с тяжёлой темой и большим количеством скриптов часто имеет смысл сначала убрать лишние функции темы, а уже потом отключать cart fragments. Иначе вы будете лечить симптом, а не причину.

Как автоматически изменить статус заказа WooCommerce при возврате
15.05.2026
Как добавить OTP (одноразовый пароль) в формы WordPress для повышения безопасности
22.02.2026
Как создать уникальный AJAX-фильтр для WooCommerce по пользовательским атрибутам
10.04.2026
Как удалить неиспользуемые метаданные WooCommerce без плагинов
12.07.2026
Как снизить размер библиотеки WP Block Library в WordPress для ускорения сайта
22.01.2026