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

Отключать 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.

Пошаговое решение без поломки корзины

  1. Сделайте резервную копию или работайте на staging-копии.
  2. Отключите только AJAX-добавление в корзину через фильтр woocommerce_product_add_to_cart_ajax_enabled.
  3. Проверьте страницу товара: товар должен добавляться в корзину с перезагрузкой.
  4. Если мини-корзина всё ещё конфликтует, временно отключите wc-cart-fragments.
  5. Проверьте checkout и страницу корзины отдельно: они должны открываться без JS-ошибок.
  6. Если используется кеш, исключите корзину, 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-плагине или в отдельном файле темы с комментариями. Тогда при обновлении темы или переносе сайта вы не потеряете логику и сможете быстро откатить изменения, если магазин начнёт вести себя иначе.

Как использовать WP-Cron для решения проблем с отключенным Cron в WooCommerce
13.07.2026
Как удалить варианты товаров WooCommerce по условию через код
23.05.2026
WooCommerce: правильное удаление вариантов товаров через код
27.06.2026
Как запретить удаление товаров в WooCommerce после покупки
30.04.2026
Как создать адаптивные шаблоны WordPress
10.11.2025