Отключать AJAX в WooCommerce обычно приходится не из любопытства, а когда он конфликтует с темой, кешем, оптимизатором JS или кастомным кодом. Типичный симптом: товар добавляется в корзину, но мини-корзина не обновляется, кнопка «Добавить в корзину» ведёт себя нестабильно, а на checkout появляются лишние запросы. В таких случаях важно не просто выключить AJAX, а понять, какие именно механики вы ломаете и чем их заменить.
Когда отключение AJAX действительно оправдано
В WooCommerce AJAX используется в нескольких местах: добавление товара в корзину без перезагрузки страницы, обновление фрагментов корзины, поведение мини-корзины и часть логики на checkout. Если у вас конфликт с минификацией скриптов, агрессивным кешем или сторонним плагином, отключение AJAX может быть временным или постоянным решением. Но для каталога с активной корзиной это почти всегда компромисс: интерфейс станет проще, зато часть динамики пропадёт.
Диагностика проблемы перед изменениями
Сначала проверьте, что именно ломается. Не отключайте AJAX «на всякий случай» — это часто маскирует настоящую причину. Посмотрите консоль браузера, Network и поведение после добавления товара в корзину. Если запросы к ?wc-ajax=add_to_cart или ?wc-ajax=get_refreshed_fragments возвращают ошибки, причина может быть не в WooCommerce, а в конфликте скриптов, кешировании или блокировке cookies.
- Откройте страницу товара в режиме инкогнито.
- Добавьте товар в корзину и проверьте, меняется ли счётчик в шапке.
- Посмотрите ошибки JavaScript в консоли.
- Проверьте, не кешируется ли корзина на уровне плагина, CDN или сервера.
- Временно отключите оптимизацию JS, если она есть.
Если после этого проблема исчезает, отключение AJAX может быть не нужно — достаточно исправить конфликт. Если же динамика мешает стабильной работе магазина, можно отключить только часть AJAX-механики.
Как отключить AJAX в WooCommerce через код
Самый безопасный путь — не править ядро и не лезть в файлы плагина, а добавить небольшой фрагмент в functions.php дочерней темы или в собственный мини-плагин. Для начала можно отключить AJAX-добавление в корзину на архивных страницах товаров.
add_filter( 'woocommerce_product_add_to_cart_ajax_enabled', '__return_false' );Этот фильтр отключает AJAX именно для добавления товара в корзину. После этого WooCommerce будет использовать обычную отправку формы с перезагрузкой страницы. Это часто помогает, если кнопка «Добавить в корзину» конфликтует с кастомным JS или если тема неправильно обрабатывает фрагменты корзины.
Если проблема связана с обновлением мини-корзины, можно отдельно отключить фрагменты корзины. Но делать это стоит только если вы понимаете последствия: счётчик и содержимое мини-корзины перестанут обновляться без перезагрузки.
add_action( 'wp_enqueue_scripts', function () {
if ( function_exists( 'is_woocommerce' ) ) {
wp_dequeue_script( 'wc-cart-fragments' );
}
}, 20 );Этот вариант уместен на сайтах, где мини-корзина не нужна в реальном времени или где её обновление создаёт лишнюю нагрузку. Если мини-корзина используется как основной элемент интерфейса, сначала протестируйте её поведение на staging-версии.
Сравнение подходов: плагин, код или частичное отключение
| Подход | Что даёт | Минус |
|---|---|---|
| Настройки плагина оптимизации | Можно быстро убрать конфликтующие скрипты | Не всегда управляет именно WooCommerce AJAX |
| Код через фильтр | Точечное отключение добавления в корзину | Потеря безперезагрузочного UX |
| Отключение cart fragments | Снижает нагрузку и убирает часть конфликтов | Мини-корзина перестаёт обновляться динамически |
Если у вас магазин с простым сценарием покупки, кодовый вариант обычно предсказуемее. Если же проблема вызвана кешем или оптимизацией, сначала проверьте настройки плагина, который объединяет и откладывает JS.
Пошаговое решение без поломки корзины
- Сделайте резервную копию или работайте на staging-копии.
- Отключите только AJAX-добавление в корзину через фильтр
woocommerce_product_add_to_cart_ajax_enabled. - Проверьте страницу товара: товар должен добавляться в корзину с перезагрузкой.
- Если мини-корзина всё ещё конфликтует, временно отключите
wc-cart-fragments. - Проверьте checkout и страницу корзины отдельно: они должны открываться без JS-ошибок.
- Если используется кеш, исключите корзину, checkout и account из кеширования.
На практике лучше отключать не всё сразу, а по шагам. Так проще понять, какой именно механизм был источником проблемы.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой. Убедитесь, что поведение стабильно в нескольких сценариях:
- товар добавляется в корзину на странице товара;
- корзина открывается и показывает правильное количество позиций;
- мини-корзина не зависает после обновления страницы;
- checkout не выдаёт ошибок JavaScript;
- счётчик товаров в шапке не расходится с содержимым корзины после перезагрузки.
Полезно открыть DevTools → Network и проверить, что нет повторяющихся запросов к wc-ajax=get_refreshed_fragments без необходимости. Если запросы исчезли, а корзина работает корректно, отключение AJAX было выполнено без лишних побочных эффектов.
Частые ошибки и как их исправить
Отключили AJAX, но забыли про кеш
Если корзина или checkout кешируются, проблема останется даже после отключения AJAX. Исключите эти страницы из кеша на уровне плагина, сервера и CDN. Иначе пользователь будет видеть старые данные корзины.
Сломали мини-корзину в шапке
Это частый побочный эффект после удаления wc-cart-fragments. Если мини-корзина нужна, не отключайте этот скрипт без теста. Иногда достаточно оставить AJAX-добавление, но убрать только конфликтующую оптимизацию JS.
Вставили код в родительскую тему
После обновления темы правка пропадёт. Используйте дочернюю тему или собственный плагин для небольших технических изменений.
Отключили всё сразу и не проверили checkout
На checkout WooCommerce часто зависит от динамических обновлений доставки и итогов заказа. После любых изменений обязательно проверьте оформление заказа на реальном наборе товаров и способах доставки.
Практические советы по безопасности и производительности
Если отключение AJAX понадобилось из-за нестабильности сайта, не ограничивайтесь одним фильтром. Проверьте, нет ли лишних скриптов в шапке, конфликтующих плагинов кеширования и дублирующихся библиотек. Для магазинов с высокой нагрузкой иногда полезнее не отключать AJAX полностью, а убрать только лишние фрагменты и оптимизировать подключение скриптов.
Если вы используете решения для чистки и оптимизации WordPress, вроде Clearfy Pro, имеет смысл отдельно проверить, не отключает ли оно нужные WooCommerce-скрипты на страницах магазина. Любая оптимизация должна быть точечной: корзина и checkout — не место для агрессивных экспериментов.
Хорошая практика — хранить такие изменения в одном небольшом MU-плагине или в отдельном файле темы с комментариями. Тогда при обновлении темы или переносе сайта вы не потеряете логику и сможете быстро откатить изменения, если магазин начнёт вести себя иначе.