Как отключить запросы cart fragments в WooCommerce в шапке и карточке товара

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

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

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

Сначала стоит убедиться, что вы боретесь именно с этой причиной, а не с общим медленным хостингом или тяжёлой темой. Откройте DevTools → Network и обновите страницу. Если видите повторяющийся запрос к ?wc-ajax=get_refreshed_fragments, значит WooCommerce пытается синхронизировать мини-корзину через AJAX.

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

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

Что именно делает cart fragments

WooCommerce использует скрипт wc-cart-fragments, чтобы обновлять мини-корзину и связанные элементы без перезагрузки страницы. Это удобно, когда корзина отображается в шапке на всём сайте. Но если мини-корзина не нужна на каждой странице, постоянный AJAX-запрос становится лишним.

Важно: не путайте отключение cart fragments с отключением AJAX в WooCommerce вообще. Здесь задача уже точнее — убрать только обновление фрагментов там, где оно не даёт пользы.

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

Самый безопасный вариант — не рубить скрипт глобально, а отключать его только на тех страницах, где мини-корзина не используется. Для этого удобно добавить код в дочернюю тему или в небольшой mu-plugin.

<?php
add_action( 'wp_enqueue_scripts', function () {
    if ( ! function_exists( 'is_woocommerce' ) ) {
        return;
    }

    $disable_on = array( 'is_front_page', 'is_home' );

    foreach ( $disable_on as $condition ) {
        if ( function_exists( $condition ) && $condition() ) {
            wp_dequeue_script( 'wc-cart-fragments' );
            wp_deregister_script( 'wc-cart-fragments' );
            break;
        }
    }
}, 20 );

Этот пример отключает скрипт на главной и на странице записей. Логику можно расширить под свой сайт: например, убрать фрагменты на страницах блога, в справке, на лендингах и оставить их только в каталоге, корзине и оформлении заказа.

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

Альтернатива через фильтр

В некоторых сценариях удобнее отключить загрузку скрипта через фильтр WooCommerce. Это менее универсально, но иногда чище, если вы хотите управлять поведением без ручного dequeue.

<?php
add_filter( 'woocommerce_enqueue_cart_fragments', function( $enqueue ) {
    if ( is_front_page() || is_home() ) {
        return false;
    }

    return $enqueue;
} );

Фильтр стоит применять только после проверки в вашей версии WooCommerce. Если он не срабатывает, не пытайтесь «додумать» несуществующий хук — лучше используйте вариант с wp_dequeue_script(), он предсказуемее.

Пошаговая настройка без поломки корзины

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

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

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

Проверка должна быть не «на глаз», а по факту.

  • в DevTools → Network больше нет запроса get_refreshed_fragments на отключённых страницах;
  • в исходном коде страницы отсутствует подключение wc-cart-fragments там, где вы его убрали;
  • мини-корзина продолжает работать на страницах, где она нужна;
  • добавление товара в корзину не ломает переход в /cart/ и /checkout/;
  • кэш-плагин не помечает весь сайт как динамический из-за этого скрипта.

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

Сравнение подходов

ПодходКогда подходитКомпромисс
Отключить глобальноМини-корзина нигде не нужнаМожно сломать UX в шапке и на страницах магазина
Отключить точечноКорзина нужна только в каталоге и checkoutНужно аккуратно выбрать условия
Оставить как естьМини-корзина критична на всех страницахСохраняется лишний AJAX-трафик

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

Скрипт отключили, а запрос остался

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

Сломалась мини-корзина в шапке

Значит, вы отключили cart fragments на странице, где шапка реально зависит от них. Верните скрипт для каталога, товара, корзины и оформления заказа, а отключайте только там, где корзина не используется.

После правки ничего не изменилось

Почти всегда виноват кэш: серверный, плагина, CDN или браузера. Очистите все уровни кэширования и повторите проверку в приватном окне.

Использовали готовый сниппет без проверки темы

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

Что ещё стоит проверить для производительности

Если вы уже трогаете cart fragments, имеет смысл посмотреть и на соседние узкие места. Иногда запросы WooCommerce — только верхушка проблемы.

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

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

Для магазинов на базе темы Bono или других WooCommerce-тем иногда полезно проверить, не добавляет ли сама тема отдельный AJAX-обновляемый блок корзины. В таких случаях правка только в WooCommerce не решает проблему полностью.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматический импорт постов из внешнего источника в WordPress
28.08.2026
WooCommerce: автоматическое обновление стоимости и количества товара после возврата
24.09.2026
Как отключить архивные страницы таксономий в WordPress без потери индексации записей
24.08.2026
Как установить уникальные слаги для таксономий в WordPress
22.09.2026
Использование WP-Cron для автоматического отправления email-отчетов в WordPress
24.08.2026
×
Прокачай свой сайт WordPress!

WordPress

-20% на премиум темы и плагины

Создай сайт своей мечты ⋙