Как отключить AJAX-корзину в WooCommerce и убрать лишние запросы

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

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

Когда AJAX-корзину действительно стоит отключать

Речь не о полном отказе от AJAX в WooCommerce, а о точечном отключении поведения, которое обновляет мини-корзину и фрагменты на лету. Это имеет смысл, если:

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

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

Диагностика: что именно грузит сайт

Перед изменениями откройте DevTools в браузере и посмотрите вкладку Network. На типичном сайте с WooCommerce часто видно:

  • запросы к ?wc-ajax=get_refreshed_fragments после загрузки страницы;
  • обновление мини-корзины при каждом действии на сайте;
  • дополнительные обращения к admin-ajax.php, если тема или плагин завязаны на AJAX-логику.

Если хотите проверить именно фрагменты корзины, временно откройте главную, категорию и карточку товара в режиме инкогнито. Сравните количество запросов до и после правки. Это проще и надёжнее, чем ориентироваться на субъективное ощущение «стало быстрее».

Что искать в исходном коде и сетевых запросах

В HTML и JS обычно всплывают такие признаки:

  • подключённый скрипт WooCommerce cart fragments;
  • локализация с параметрами wc_cart_fragments_params;
  • вызовы get_refreshed_fragments после загрузки страницы;
  • виджет мини-корзины в шапке, который зависит от AJAX-обновления.

Если мини-корзина не нужна, можно убрать не только сам запрос, но и сам скрипт, который его запускает.

Пошаговое решение через код

Самый безопасный вариант — добавить небольшой фрагмент в дочернюю тему или в собственный мини-плагин. Не правьте ядро темы и не вносите изменения в файлы WooCommerce: после обновления всё слетит.

1. Отключаем скрипт cart fragments на фронтенде

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

add_action( 'wp_enqueue_scripts', function () {
    if ( function_exists( 'is_woocommerce' ) ) {
        wp_dequeue_script( 'wc-cart-fragments' );
        wp_deregister_script( 'wc-cart-fragments' );
    }
}, 20 );

Здесь важно не делать это бездумно на всех страницах, если тема использует мини-корзину. После отключения счётчик в шапке может перестать обновляться без перезагрузки.

2. Убираем AJAX-добавление в корзину для архивов товаров

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

add_filter( 'woocommerce_loop_add_to_cart_link', function( $html, $product, $args ) {
    if ( ! is_a( $product, 'WC_Product' ) ) {
        return $html;
    }

    // Убираем AJAX-класс у кнопки в каталоге.
    $html = str_replace( 'ajax_add_to_cart', '', $html );

    return $html;
}, 10, 3 );

Этот способ грубее, чем отключение фрагментов, поэтому его стоит применять только если вы понимаете, как у вас устроены карточки товаров и мини-корзина.

3. Отключаем AJAX для конкретных шаблонов или устройств

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

add_action( 'wp_enqueue_scripts', function () {
    if ( wp_is_mobile() ) {
        wp_dequeue_script( 'wc-cart-fragments' );
        wp_deregister_script( 'wc-cart-fragments' );
    }
}, 20 );

Это компромиссный вариант. Он не решает проблему архитектурно, но помогает быстро локализовать источник нагрузки и проверить, связан ли баг именно с AJAX-обновлением корзины.

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

СпособЧто отключаетКогда подходитРиск
Плагин для оптимизацииЧасть лишних скриптов и дублейЕсли нужен быстрый результат без кодаМожет не дать точечного контроля
Код через wp_dequeue_scriptAJAX-фрагменты корзиныЕсли мини-корзина не нужнаМожно сломать счётчик в шапке
Отключение AJAX только в каталогеAJAX-добавление в корзинуЕсли проблема в кнопке «В корзину»Меняется пользовательский сценарий

Если у вас уже стоит оптимизационный плагин, например Clearfy Pro, часть лишних скриптов и дублей можно убрать через его настройки, но именно поведение корзины чаще надёжнее контролировать кодом. Для магазина это обычно предсказуемее, чем надеяться на общий чекбокс «ускорить сайт».

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

Проверка должна быть не только визуальной. Сделайте три шага:

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

Дополнительно можно проверить консоль браузера на ошибки JavaScript. Если после отключения скрипта тема пытается обратиться к wc_cart_fragments_params, в консоли появятся ошибки, и это сигнал, что тема жёстко завязана на этот механизм.

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

Отключили скрипт, но мини-корзина пропала

Это ожидаемо, если шапка использует AJAX-обновление. Решение простое: либо возвращаете скрипт, либо заменяете мини-корзину на статичный блок, который обновляется только после перехода на страницу корзины.

Правка добавлена в functions.php родительской темы

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

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

У WooCommerce и темы могут быть свои AJAX-обвязки. Если в Network по-прежнему видны запросы, проверьте, не генерирует ли их сама тема или сторонний плагин корзины. Иногда нужно отключать не только wc-cart-fragments, но и собственный скрипт темы.

Проверяли только в админке

Проблема проявляется на фронтенде. Админка может работать нормально, а посетители всё равно будут получать лишние запросы. Тестируйте именно публичные страницы, лучше в режиме инкогнито.

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

Если вы правите WooCommerce кодом, держите изменения минимальными и обратимыми. Перед выкладкой на боевой сайт:

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

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

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

Автоматическое удаление товаров WooCommerce с отсутствующими вариациями
20.06.2026
Как отключить XML-RPC в WordPress и защитить сайт от лишних запросов
13.08.2026
Создание динамического шорткода с параметрами в WordPress
16.01.2026
Как настроить noindex для страниц с параметрами в WordPress
27.08.2026
Как создать и настроить круговое меню в WordPress без плагинов
04.01.2026