Почему может понадобиться отключить AJAX в WooCommerce
WooCommerce использует AJAX для обновления корзины, фильтров, мини-корзины и других элементов без перезагрузки страницы. В некоторых случаях это вызывает конфликты с кастомными скриптами или тормозит работу сайта. Правильное отключение AJAX поможет избежать таких проблем, не ломая функциональность.
Диагностика проблемы: как понять, что AJAX конфликтует
- При добавлении товара в корзину страница не обновляется, а корзина не меняется визуально.
- Фильтры товаров не срабатывают или отображают неверные результаты.
- Ошибки в консоли браузера, связанные с AJAX-запросами WooCommerce.
- Конфликты с плагинами, которые используют свои AJAX-запросы.
Проверка консоли и сетевых запросов
Откройте инструменты разработчика (F12), вкладки «Консоль» и «Сеть». При добавлении товара в корзину или использовании фильтра посмотрите, отправляются ли AJAX-запросы, и нет ли ошибок 400, 500 или JS-ошибок.
Пошаговое решение: отключение AJAX в WooCommerce без конфликтов
Отключать AJAX в WooCommerce нужно аккуратно, так как многие функции завязаны на нём. Вот рабочий способ отключить AJAX-обновление корзины при добавлении товара:
add_filter('woocommerce_add_to_cart_fragments', '__return_empty_array');Этот фильтр отключает обновление мини-корзины через AJAX.
Чтобы отключить AJAX для обновления корзины на странице корзины, добавьте следующий скрипт в footer.php темы или enqueue в functions.php:
function disable_woocommerce_cart_ajax() {
if (is_cart()) {
wp_dequeue_script('wc-cart-fragments');
}
}
add_action('wp_print_scripts', 'disable_woocommerce_cart_ajax', 100);Если нужно отключить AJAX фильтры товаров (например, в виджетах или плагинах), то нужно смотреть конкретно на плагин фильтрации и его настройки. В базовом WooCommerce AJAX фильтры отсутствуют.
Отключение AJAX в шаблонах
Если в вашей теме используются кастомные AJAX-вызовы WooCommerce, отключите их, удалив соответствующие скрипты через wp_dequeue_script() или через настройки темы.
Как проверить, что AJAX действительно отключен
- Добавьте товар в корзину с фронтенда — страница должна перезагрузиться, и корзина обновится без AJAX.
- В инструментах разработчика на вкладке «Сеть» не должно быть AJAX-запросов с адресом
admin-ajax.phpпри добавлении товара. - Мини-корзина не обновляется динамически после добавления товара.
- Проверьте консоль браузера на отсутствие ошибок.
Частые ошибки и как их исправить
- Ошибка: Страница не обновляет корзину вообще.
Причина: Отключен AJAX, но нет перезагрузки страницы.
Решение: Убедитесь, что кнопка добавления товара не использует AJAX-обработчик и вызывает стандартную отправку формы. - Ошибка: После отключения AJAX ломается мини-корзина.
Причина: Используется кастомный скрипт, завязанный на AJAX.
Решение: Проверьте и адаптируйте скрипты, отключите их или перепишите под работу без AJAX. - Ошибка: Фильтры товаров продолжают работать через AJAX, несмотря на отключение.
Причина: Фильтры реализованы отдельным плагином с собственным AJAX.
Решение: Отключайте AJAX в настройках плагина или через его документацию.
Практические советы по безопасности и производительности
- Отключение AJAX может увеличить нагрузку на сервер из-за полной перезагрузки страниц, учитывайте это при трафике.
- Проверяйте кэширование: после отключения AJAX необходимо очистить кэш браузера и сайта.
- Используйте
wp_dequeue_script()с приоритетом 100 и выше, чтобы гарантированно удалить скрипты WooCommerce. - Всегда тестируйте изменения на локальной копии сайта перед продакшеном.
Сравнение способов отключения AJAX в WooCommerce
| Метод | Что отключает | Плюсы | Минусы |
|---|---|---|---|
Фильтр woocommerce_add_to_cart_fragments | Обновление мини-корзины AJAX | Просто и быстро | Мини-корзина не обновляется динамически |
Деактивация скрипта wc-cart-fragments | AJAX для корзины на странице корзины | Отключает AJAX полностью на странице корзины | Может вызвать перезагрузки и потерю UX |
| Отключение AJAX в плагинах фильтров | AJAX-обновление товаров по фильтрам | Контролируемо через настройки плагина | Требует изучения документации плагина |