Как отключить AJAX в WooCommerce для ускорения страницы корзины и не сломать функционал

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

Когда это действительно имеет смысл

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

Типичный сценарий: пользователь открывает корзину, а в DevTools видно несколько запросов к /?wc-ajax=... или к admin-ajax.php. При этом страница не меняется визуально, но время до полной готовности растёт. В таком случае сначала отключают именно то, что не нужно на корзине, а не весь AJAX целиком.

Диагностика проблемы перед правкой кода

Перед изменениями проверьте, кто именно создаёт нагрузку. Это важно, потому что иногда виноват не WooCommerce, а тема или плагин доставки/оплаты.

Что смотреть в браузере

  • Откройте DevTools → Network.
  • Перезагрузите страницу корзины с включённой записью запросов.
  • Отфильтруйте по XHR или Fetch.
  • Посмотрите, повторяются ли запросы к wc-ajax=get_refreshed_fragments или к admin-ajax.php.

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

Что проверить на сервере

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

Если на сервере всё чисто, а тормозит только фронтенд, тогда имеет смысл отключать фрагменты и лишние AJAX-действия именно на корзине.

Рабочая схема: отключаем лишние cart fragments только на корзине

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

<?php
add_filter( 'woocommerce_get_script_data', function( $params, $handle ) {
    if ( 'wc-cart-fragments' !== $handle ) {
        return $params;
    }

    // Отключаем фрагменты только на странице корзины.
    if ( function_exists( 'is_cart' ) && is_cart() ) {
        return null;
    }

    return $params;
}, 10, 2 );

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

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

Если нужно убрать и лишние скрипты на корзине

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

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

    // Убираем только фрагменты корзины на самой корзине.
    wp_dequeue_script( 'wc-cart-fragments' );
    wp_deregister_script( 'wc-cart-fragments' );
}, 100 );

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

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

ПодходЧто делаетРискКогда использовать
Отключить фрагменты через фильтрУбирает обновление cart fragments только на корзинеНизкийЕсли нужно точечное ускорение
Dequeue/Deregister скриптаПолностью снимает скрипт с загрузки на страницеСреднийЕсли фильтра недостаточно
Отключить AJAX глобальноЛомает часть поведения WooCommerceВысокийПочти никогда не стоит делать без тестов

Пошаговое внедрение без сюрпризов

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

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

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

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

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

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

Отключили AJAX глобально и сломали checkout

Такое происходит, когда пытаются убрать все запросы WooCommerce одним махом. Не отключайте admin-ajax.php на уровне сервера и не режьте все скрипты подряд. Работайте только с конкретным handle или фильтром.

Сняли не тот скрипт

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

Не очистили кэш

Если на сайте есть page cache, Cloudflare или серверный кэш, вы можете смотреть старую версию страницы и думать, что код не работает. После правки очистите все уровни кэша, иначе диагностика будет ложной.

Путают проблему корзины с тяжёлыми хуками

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

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

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

Если задача шире, чем одна корзина, имеет смысл посмотреть на общую чистку фронтенда: убрать лишние скрипты темы, отключить дубль-стили, сократить число сторонних виджетов. Для этого иногда удобнее использовать Clearfy Pro, но только если вы понимаете, какие именно опции включаете и зачем: https://wpshop.ru/plugins/clearfy?utm_source=wptool.ru&utm_medium=article&utm_campaign=kak-otklyuchit-ajax-v-woocommerce-dlya-uskoreniya-stranicy-korziny-i-ne-slomat-funkcional

И ещё один практический момент: если вы отключаете AJAX на корзине ради скорости, не забывайте тестировать мобильную версию отдельно. На мобильных устройствах некоторые темы сильнее завязаны на динамическое обновление блоков, и там побочные эффекты заметнее.

WooCommerce: автоматическое изменение цен при изменении атрибутов товара
13.06.2026
Как добавить автоматически работающий кэш в WordPress с примерами кода
01.01.2026
Автоматический отчет по активности пользователей в WordPress: как сделать и настроить
17.02.2026
Как использовать REST API в WordPress для создания своего плагина
22.11.2025
WooCommerce: как автоматически отключить оплату при неактивном заказе
02.07.2026