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

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

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

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

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

  • На странице корзины постоянно идут запросы к wc-ajax=get_refreshed_fragments.
  • После изменения количества товара страница пересчитывается с задержкой и визуальными рывками.
  • На checkout сторонний скрипт отправляет запросы при каждом вводе символа в поле.
  • В консоли браузера появляются ошибки после отключения кэша или оптимизатора JS.

Что проверить до правок

Откройте DevTools → Network и отфильтруйте запросы по wc-ajax и admin-ajax.php. Посмотрите, кто их инициирует. Если запрос идет из темы или плагина доставки, отключение WooCommerce AJAX не решит проблему. Если же лишние запросы идут от мини-корзины, фрагментов корзины или автопересчета, тогда точечная правка уместна.

Подход Что делает Риск
Плагин оптимизации Может отключить фрагменты, мини-корзину, лишний JS Нужно тестировать совместимость с темой и оплатой
Код в теме или mu-plugin Точечно убирает нужные AJAX-обработчики Можно сломать обновление корзины, если отключить лишнее
Отключение всего AJAX Убирает динамику почти полностью Чаще всего слишком грубо для WooCommerce

Пошаговое решение: отключаем только лишние AJAX-фрагменты

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

1. Отключите фрагменты корзины на неключевых страницах

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

<?php
add_action( 'wp_enqueue_scripts', function () {
    if ( function_exists( 'is_cart' ) && function_exists( 'is_checkout' ) ) {
        if ( ! is_cart() && ! is_checkout() ) {
            wp_dequeue_script( 'wc-cart-fragments' );
            wp_deregister_script( 'wc-cart-fragments' );
        }
    }
}, 20 );

Этот код лучше добавлять в дочернюю тему или в небольшой mu-plugin, а не в основной файл темы. Так правка не потеряется при обновлении.

2. Уберите автопересчет, если его добавила тема

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

<?php
add_action( 'wp_enqueue_scripts', function () {
    if ( function_exists( 'is_checkout' ) && is_checkout() ) {
        wp_dequeue_script( 'theme-checkout-ajax' );
        wp_dequeue_script( 'custom-shipping-calculator' );
    }
}, 100 );

Имена theme-checkout-ajax и custom-shipping-calculator здесь примерные. Их нужно заменить на реальные handle из вашей установки. Если handle не совпадает, код ничего не сделает — это нормально, но и эффекта не будет.

3. Если нужен только обычный пересчет корзины, оставьте checkout AJAX в покое

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

Поэтому в большинстве магазинов разумнее отключать только:

  • фрагменты мини-корзины вне cart/checkout;
  • лишние скрипты темы, которые дублируют логику WooCommerce;
  • автообновление виджетов, не влияющих на оплату.

Если нужно отключить AJAX только на корзине

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

<?php
add_action( 'wp_enqueue_scripts', function () {
    if ( function_exists( 'is_cart' ) && is_cart() ) {
        wp_dequeue_script( 'wc-cart-fragments' );
        wp_deregister_script( 'wc-cart-fragments' );
    }
}, 20 );

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

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

Проверка должна быть не «страница открылась», а набором конкретных действий. Иначе можно пропустить скрытую поломку, которая проявится только у покупателя.

  • Откройте корзину и checkout в режиме инкогнито.
  • В DevTools → Network убедитесь, что количество запросов к wc-ajax=get_refreshed_fragments уменьшилось или они исчезли там, где вы их отключали.
  • Измените количество товара и проверьте, пересчитывается ли итог.
  • Добавьте купон и убедитесь, что скидка применяется корректно.
  • Смените адрес доставки и проверьте обновление стоимости доставки и налогов.
  • Протестируйте оплату в тестовом режиме, если платежный шлюз завязан на AJAX-обновления checkout.

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

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

Отключили не тот handle

Самая частая проблема: код написан правильно, но handle скрипта взят из головы. В результате ничего не меняется. Исправление простое — откройте исходник страницы, список подключенных скриптов или используйте Query Monitor, чтобы увидеть реальные имена.

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

Если тема обновляет мини-корзину через wc-cart-fragments, ее отключение уберет динамическое число товаров и сумму. В таком случае либо оставьте фрагменты на главной и каталоге, либо замените мини-корзину на вариант без AJAX.

Отключили AJAX на checkout полностью

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

Код добавили в файл темы без резервной копии

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

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

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

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

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

Что делать, если после правки проблема осталась

Тогда причина, скорее всего, не в WooCommerce AJAX как таковом. Проверьте:

  • скрипты темы, которые пересчитывают корзину отдельно от WooCommerce;
  • плагины доставки и оплаты, которые делают собственные запросы;
  • ошибки JavaScript в консоли;
  • конфликты с кэшированием HTML или JS-оптимизацией;
  • кастомные поля checkout, которые отправляют данные через admin-ajax.php.

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

Как удалить незаконченные (незакзанные) товары из WooCommerce по дате и статусу
20.09.2026
Как удалить виджеты в WordPress по умолчанию: практическое руководство с примерами кода
03.10.2026
Как автоматически удалять отменённые и незаконченные заказы WooCommerce по дате
30.09.2026
Как удалить отменённые заказы WooCommerce по дате и статусу через код
29.09.2026
Как создать автоматическое отправление отзывов на WordPress с примерами кода и плагинов
01.10.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее