В WooCommerce AJAX-обновление корзины удобно до тех пор, пока не начинает мешать: конфликтует с кастомными скриптами, ломает поведение купонов, создаёт лишние запросы или просто усложняет отладку. Важно не отключать всё подряд, а убрать только тот механизм, который реально вызывает проблему.
Когда AJAX в корзине становится проблемой
Чаще всего жалобы выглядят одинаково: после изменения количества товаров корзина обновляется, но часть элементов интерфейса не синхронизируется; кнопка применения купона срабатывает нестабильно; сторонний плагин доставки или оплаты получает устаревшие данные. В таких случаях сначала нужно понять, что именно обновляется через AJAX, а что должно работать обычной отправкой формы.
Типичные симптомы
- после изменения количества товаров мини-корзина обновляется, а страница корзины — нет;
- скрипт темы или плагина перехватывает событие
updated_cart_totalsи падает с ошибкой; - на медленных сайтах AJAX-запросы создают лишнюю нагрузку;
- оформление заказа зависит от полной перезагрузки страницы, а AJAX мешает логике расчёта доставки.
Диагностика: что именно отключать
В WooCommerce под «AJAX-обновлением корзины» обычно имеют в виду не один механизм, а несколько разных вещей: обновление количества товаров без перезагрузки, пересчёт итогов, мини-корзину в шапке и AJAX-действия на странице оформления заказа. Поэтому сначала проверьте, где возникает проблема.
- Откройте страницу корзины в режиме инкогнито.
- Измените количество товара и посмотрите, уходит ли запрос в
/?wc-ajax=update_order_reviewили похожие endpoint'ы. - В консоли браузера проверьте ошибки JavaScript.
- Временно отключите плагины, которые вмешиваются в корзину: доставки, оплаты, кросс-сейлы, кастомные фильтры.
- Сравните поведение на стандартной теме и на вашей теме.
Если ошибка появляется только на странице корзины, обычно достаточно отключить именно AJAX-поведение этой страницы, а не трогать checkout или мини-корзину.
Рабочий вариант: отключить AJAX-обновление корзины точечно
Самый безопасный путь — убрать AJAX только там, где он мешает. Для этого можно отключить стандартный скрипт WooCommerce, который отвечает за обновление корзины на странице cart. Такой подход не ломает оформление заказа и не затрагивает другие AJAX-функции магазина.
<?php
add_action( 'wp_enqueue_scripts', function() {
if ( function_exists( 'is_cart' ) && is_cart() ) {
wp_dequeue_script( 'wc-cart' );
wp_deregister_script( 'wc-cart' );
}
}, 20 );Этот код лучше добавлять в дочернюю тему или в небольшой mu-plugin, а не в файл родительской темы. Так вы не потеряете правку после обновления.
Если нужно отключить только автообновление итогов
Иногда проблема не в самой корзине, а в пересчёте итогов после каждого действия. Тогда можно оставить форму корзины рабочей, но убрать лишние AJAX-события на стороне темы или кастомного скрипта. Если у вас есть собственный JS, который вызывает обновление при каждом вводе, проверьте обработчики на событиях change и keyup и уберите автоматический вызов пересчёта.
<script>
document.addEventListener('DOMContentLoaded', function () {
const qtyInputs = document.querySelectorAll('.woocommerce-cart-form input.qty');
qtyInputs.forEach(function (input) {
input.removeEventListener('change', window.wc_cart_update_handler || function() {});
});
});
</script>Этот пример показан только как ориентир по логике: в реальном проекте нужно смотреть, какой именно обработчик добавляет тема или плагин. Универсального имени функции здесь нет.
Сравнение подходов
| Подход | Когда подходит | Минус |
|---|---|---|
Отключить скрипт wc-cart на странице корзины | AJAX ломает корзину или конфликтует с кастомными скриптами | Пользователь будет обновлять корзину вручную |
| Исправить конфликтующий плагин/тему | Проблема только в одном расширении | Нужно время на диагностику |
| Оставить AJAX и убрать лишние обработчики | Нужна быстрая корзина без полной перезагрузки | Требует аккуратной правки JS |
Пошаговое решение без поломки checkout
Если задача — убрать именно обновление корзины, но не затронуть оформление заказа, действуйте по шагам.
Шаг 1. Зафиксируйте исходное поведение
Сделайте тестовый заказ в staging-окружении. Проверьте:
- изменение количества товара в корзине;
- применение купона;
- пересчёт доставки;
- переход к checkout;
- работу мини-корзины в шапке.
Шаг 2. Добавьте код отключения только на cart
Используйте код выше и очистите кеш страницы, если он есть. Если стоит плагин кеширования, исключите корзину и checkout из кеша — это обязательная настройка для WooCommerce.
Шаг 3. Проверьте консоль и Network
Откройте DevTools, вкладку Network, и повторите действия в корзине. После отключения скрипта wc-cart на странице cart не должно быть AJAX-запросов, связанных с обновлением корзины. При этом переход на checkout должен остаться обычным.
Как проверить, что решение сработало
Проверка должна быть не визуальной, а функциональной. Смотрите на конкретные признаки:
- изменение количества товара не вызывает AJAX-запросов на странице корзины;
- кнопка «Обновить корзину» работает через обычную отправку формы;
- купоны применяются и не сбрасывают товары;
- итоговая сумма на checkout совпадает с корзиной;
- в консоли браузера нет ошибок JavaScript после правки.
Если после отключения AJAX корзина перестала пересчитывать доставку, значит вы отключили слишком много. В этом случае возвращайте скрипты по одному и ищите конкретный конфликт.
Частые ошибки и как их исправить
Отключили не тот скрипт
Иногда пытаются убрать все скрипты WooCommerce сразу. Это приводит к тому, что ломается мини-корзина, вариации товаров или checkout. Отключайте только wc-cart и только на странице корзины, если именно там проблема.
Не учли кеширование
Если корзина закеширована, пользователь может видеть старые данные даже после правильной правки кода. Исключите /cart/ и /checkout/ из кеша на уровне плагина, сервера или CDN.
Сломали кастомный JS темы
Некоторые темы завязаны на события WooCommerce и ждут AJAX-обновления. После отключения скрипта такие обработчики перестают срабатывать. В этом случае нужно либо переписать логику на обычную отправку формы, либо оставить AJAX и убрать конфликтующий код.
Правили файл темы напрямую
После обновления темы изменения исчезнут. Для таких правок используйте дочернюю тему или mu-plugin. Это особенно важно, если магазин живой и обновляется регулярно.
Практические советы по безопасности и производительности
Если вы отключаете AJAX ради стабильности, не забывайте о сопутствующих настройках:
- не кешируйте корзину и checkout;
- проверяйте совместимость с плагинами доставки и оплаты;
- не добавляйте в корзину тяжёлые скрипты без необходимости;
- если правите JS, не используйте глобальные переменные без проверки их наличия;
- тестируйте на staging перед выкладкой в продакшен.
Если вам нужно не просто отключить AJAX, а ещё и убрать лишние скрипты, связанные с корзиной и оформлением заказа, это лучше делать поэтапно. Сначала стабилизируйте cart, потом уже оптимизируйте фронтенд.
Когда лучше не отключать AJAX полностью
Если магазин активно использует быстрые сценарии покупки, AJAX в корзине может быть полезен. В таком случае лучше искать точечный конфликт: один плагин, один обработчик, один шаблон. Полное отключение — это рабочий обходной путь, но не всегда оптимальное постоянное решение.
Если проблема связана с лишними скриптами и дублями функциональности, иногда проще сначала почистить фронтенд и отключить ненужные элементы через Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpmoney.ru&utm_medium=article&utm_campaign=kak-otkljuchit-ajax-obnovlenie-korziny-woocommerce-bez-poteri-funktsionalnosti