Что такое AJAX-обновление корзины в WooCommerce и зачем его отключать
В WooCommerce AJAX-обновление корзины позволяет динамически изменять содержимое корзины без перезагрузки страницы. Это удобно для пользователей, но иногда вызывает проблемы с совместимостью тем или плагинов, а также замедляет работу сайта из-за дополнительных запросов.
Чаще всего отключение AJAX-обновления требуется, если после добавления товара в корзину не обновляется виджет корзины или возникают баги в оформлении заказа.
Диагностика проблемы с AJAX-обновлением корзины
- Проверьте в консоли браузера (F12 → Console) наличие ошибок JavaScript при добавлении товара в корзину.
- Откройте вкладку Network и посмотрите, отправляются ли AJAX-запросы при изменении количества товара в корзине.
- Проверьте, обновляется ли содержимое виджета корзины без перезагрузки страницы.
- Если корзина не обновляется, попробуйте временно переключиться на дефолтную тему WordPress (например, Twenty Twenty-Three) и отключить все плагины кроме WooCommerce – если проблема пропала, причина в теме или конфликте с плагином.
Пошаговое отключение AJAX-обновления корзины в WooCommerce
Для отключения AJAX-обновления корзины в WooCommerce достаточно добавить кастомный код в файл functions.php вашей дочерней темы или в плагин для кастомных функций. Вот проверенный способ:
add_filter( 'woocommerce_add_to_cart_fragments', '__return_empty_array' );Этот фильтр отключает обновление фрагментов (частей) страницы через AJAX, в том числе виджета корзины.
Если нужно отключить именно добавление в корзину через AJAX, используйте следующий код, который убирает скрипт AJAX добавления:
function disable_woocommerce_ajax_add_to_cart() {
wp_dequeue_script( 'wc-add-to-cart' );
wp_dequeue_script( 'wc-cart-fragments' );
}
add_action( 'wp_enqueue_scripts', 'disable_woocommerce_ajax_add_to_cart', 99 );Этот код отменит загрузку скриптов, отвечающих за AJAX в корзине, что приведёт к классическому поведению с перезагрузкой страницы.
Проверка результата после внедрения
- Очистите кеш браузера и кеш плагинов кеширования на сайте.
- Перейдите на страницу товара, попробуйте добавить товар в корзину.
- Убедитесь, что после нажатия кнопки «Добавить в корзину» происходит полная перезагрузка страницы.
- Проверьте консоль браузера на отсутствие ошибок JavaScript, связанных с WooCommerce.
- Обновите страницу с корзиной и проверьте, что количество товаров изменилось корректно.
Частые ошибки и как их исправлять
- Ошибка: После отключения AJAX корзина не обновляется автоматически.
Причина: Кэширование страниц или браузер держит старую версию JS.
Решение: Очистите кеш плагинов (например, WP Rocket, W3 Total Cache) и браузера, проверьте в режиме инкогнито. - Ошибка: Скрипты отключены, но AJAX всё равно работает.
Причина: Другие плагины или тема подключают свои AJAX-скрипты для корзины.
Решение: Поиск по коду темы и плагинов на наличие wp_enqueue_script('wc-cart-fragments') и отключение там. - Ошибка: Отключение AJAX приводит к ухудшению UX, пользователи жалуются.
Решение: Рассмотрите исправление конфликта в теме или плагинах, вместо полного отключения AJAX.
Практические советы по безопасности и производительности
- Отключение AJAX-обновления корзины может снизить нагрузку на сервер, так как уменьшается количество AJAX-запросов.
- Если используете CDN, убедитесь, что кеш не мешает обновлению корзины после отключения AJAX.
- Обязательно тестируйте изменения на staging-сайте перед внесением на рабочий сайт.
- Для сайтов с большой посещаемостью лучше оптимизировать AJAX-запросы, а не полностью их отключать.
Сравнение способов отключения AJAX-обновления корзины
| Метод | Код | Плюсы | Минусы |
|---|---|---|---|
| Возврат пустых фрагментов | | Простой, не отключает весь AJAX | Может не отключить все AJAX-операции |
| Удаление скриптов AJAX | | Полностью выключает AJAX корзины | Потеря динамичности, перезагрузка страниц |
| Исправление конфликтов темы/плагинов | Поиск и исправление кода | Сохраняет UX, устраняет баги | Требует времени и навыков |