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

Почему и когда нужно отключать AJAX в WooCommerce

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

Диагностика проблем с AJAX в WooCommerce

Чтобы определить, что именно AJAX вызывает проблему:

  • Откройте консоль разработчика в браузере (F12) и перейдите на вкладку Network.
  • Обновите страницу и добавьте товар в корзину, проверьте запросы с типом XHR — если они возвращают ошибки (500, 400 и др.), скорее всего, AJAX вызывает конфликт.
  • Отключите все плагины, кроме WooCommerce, и смените тему на дефолтную (Storefront). Если проблема исчезла — конфликт в кастомных скриптах или плагинах.
  • Включите плагин поочередно, чтобы локализовать источник проблемы.

Пошаговое отключение AJAX в WooCommerce

Отключение AJAX для кнопки «Добавить в корзину» на страницах архива

WooCommerce по умолчанию использует AJAX для кнопок add_to_cart на страницах категорий и магазина. Чтобы отключить этот функционал и сделать добавление товара классическим с перезагрузкой страницы, добавьте следующий код в functions.php темы или в кастомный плагин:

add_filter('woocommerce_product_add_to_cart_url', 'disable_ajax_add_to_cart_url', 99, 2);
function disable_ajax_add_to_cart_url($url, $product) {
    if (is_shop() || is_product_category() || is_product_tag()) {
        // Возвращаем ссылку напрямую на страницу товара с параметром добавления в корзину
        return $product->get_permalink() . '?add-to-cart=' . $product->get_id();
    }
    return $url;
}

Отключение AJAX обновления корзины на странице оформления заказа

Если AJAX обновление корзины в WooCommerce Checkout вызывает ошибки, можно отключить скрипт, который отвечает за AJAX в корзине:

add_action('wp_enqueue_scripts', 'dequeue_woocommerce_checkout_ajax', 99);
function dequeue_woocommerce_checkout_ajax() {
    if (is_checkout()) {
        wp_dequeue_script('wc-checkout');
        wp_dequeue_script('wc-cart');
    }
}

Отключение AJAX в виджете мини-корзины

Мини-корзина в WooCommerce обновляется через AJAX. Чтобы отключить это:

add_filter('woocommerce_add_to_cart_fragments', '__return_empty_array');

Этот фильтр предотвращает обновление мини-корзины через AJAX. После добавления этого кода мини-корзина будет обновляться только при перезагрузке страницы.

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

После внесения изменений:

  • Очистите кэш браузера и кэш плагинов кэширования (если есть).
  • Добавьте товар в корзину и убедитесь, что страница не обновляется (если хотели оставить AJAX) или обновляется (если отключили AJAX).
  • Проверьте консоль на отсутствие ошибок JavaScript.
  • Пройдите оформление заказа, чтобы убедиться, что корзина обновляется корректно без AJAX-ошибок.

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

  • Ошибка: Некорректное обновление мини-корзины после отключения AJAX
    Причина: кеширование мини-корзины или не отключен фильтр woocommerce_add_to_cart_fragments. Решение: добавьте фильтр __return_empty_array как показано выше и проверьте кеш.
  • Ошибка: Страница не обновляется после отключения AJAX на кнопке «Добавить в корзину»
    Причина: неправильный URL в ссылке. Решение: используйте фильтр woocommerce_product_add_to_cart_url для генерации правильной ссылки с параметром ?add-to-cart=ID.
  • Ошибка: После отключения AJAX Checkout перестал работать обновление стоимости
    Причина: отключение скриптов wc-checkout и wc-cart может привести к проблемам с динамическими обновлениями. Решение: отключайте скрипты только при полной уверенности, тестируйте оформление заказа.

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

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

Сравнение способов отключения AJAX в WooCommerce

СпособЧто отключаетПлюсыМинусы
Фильтр woocommerce_product_add_to_cart_urlAJAX добавление товара из архиваПростая реализация, не ломает страницу товараПотеря UX — страница перезагружается
Деактивация скриптов wc-checkout, wc-cartAJAX обновление корзины и оформления заказаУстраняет конфликты с AJAXМожет сломать динамическое обновление стоимости и скидок
Фильтр woocommerce_add_to_cart_fragmentsAJAX обновление мини-корзиныМинимальное вмешательство, быстроМини-корзина обновляется только при перезагрузке страницы
Правильное удаление неактивных пользователей WordPress с примером кода
30.04.2026
Оптимизация массового создания постов в WordPress: практические решения
17.07.2026
Как автоматизировать удаление старых категорий в WordPress
12.03.2026
Как удалить заказы WooCommerce без удаления пользователя
02.06.2026
Как создать автоматический импорт отзывов в WordPress
09.02.2026