Диагностика проблемы: когда стоит отключать AJAX в WooCommerce
WooCommerce использует AJAX для обновления корзины, фильтров и других элементов без перезагрузки страницы. Это улучшает UX, но при большом трафике или на слабом сервере AJAX-запросы могут замедлять сайт, увеличивать нагрузку на сервер и приводить к конфликтам с плагинами или темой.
Проверьте, замедляется ли сайт именно из-за AJAX, с помощью инструментов анализа производительности (Query Monitor, New Relic) и отключите AJAX на тестовом сайте перед применением на боевом.
Какие AJAX-функции можно отключить в WooCommerce
Чаще всего отключают:
- Обновление корзины в виджете (mini cart)
- Фильтры товаров на страницах каталога
- Кнопку «Добавить в корзину» на страницах архивов
Пошаговое отключение AJAX в WooCommerce
1. Отключаем AJAX для обновления мини-корзины
Добавьте следующий код в functions.php вашей дочерней темы или в плагин для пользовательских функций:
add_filter('woocommerce_widget_cart_is_hidden', '__return_true'); // Мини-корзина не обновляется через AJAX
add_filter('woocommerce_add_to_cart_fragments', '__return_empty_array'); // Отключаем обновление корзины в header через AJAX
2. Отключаем AJAX для кнопки «Добавить в корзину» на страницах архива
Если в вашем шаблоне используется AJAX для добавления товара в корзину с архивных страниц, отключите его так:
function disable_ajax_add_to_cart() {
remove_action('wp_footer', array(WC_Frontend_Scripts::class, 'localize_printed_scripts'));
}
add_action('wp_enqueue_scripts', 'disable_ajax_add_to_cart', 99);
Это отключит локализацию скриптов, отвечающую за AJAX добавление, но может потребовать корректировок темы.
3. Отключаем AJAX для фильтров и сортировки
Если используете плагин для фильтров с AJAX (например, FacetWP или WOOF), отключите AJAX в настройках плагина. Если фильтры реализованы кастомно, уберите обработчики AJAX в JS и PHP.
Проверка результата после отключения AJAX
- Откройте страницу с корзиной, добавьте товар и убедитесь, что страница перезагружается при обновлении корзины.
- Проверьте, что кнопка «Добавить в корзину» на страницах каталога перезагружает страницу, а не обновляет корзину без перезагрузки.
- С помощью инструментов разработчика браузера убедитесь, что не отправляются AJAX-запросы при действиях корзины.
- Проверьте скорость загрузки и нагрузку на сервер — время ответа должно уменьшиться.
Частые ошибки и как их исправить
- После отключения AJAX кнопки «Добавить в корзину» перестают работать. Проверьте, не завязаны ли другие скрипты темы или плагинов на AJAX-обработчики. Включите консоль браузера — там могут быть ошибки JS.
- Мини-корзина не обновляется после добавления товара. Убедитесь, что фильтры
woocommerce_add_to_cart_fragmentsудалены правильно, или полностью отключите мини-корзину, если она не нужна. - Фильтры товаров перестали работать. Проверьте настройки плагинов фильтрации, возможно, нужно отключать AJAX именно там, а не вручную.
Практические советы по безопасности и производительности
- Перед внесением изменений создайте бэкап сайта.
- Тестируйте изменения на тестовом или staging-сайте.
- Отключайте AJAX выборочно — не всегда его отключение улучшит UX.
- Используйте кеширование страниц (например, через Clearfy Pro из WPShop), чтобы снизить нагрузку на сервер.
- Регулярно обновляйте WooCommerce и плагины, чтобы избежать конфликтов.
Сравнение способов отключения AJAX в WooCommerce
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Код в functions.php | Отключение через хуки и фильтры | Гибко, бесплатно, нет лишних плагинов | Требует навыков, возможны ошибки JS |
| Настройки плагинов фильтрации | Отключение AJAX в настройках фильтров | Просто, без кода | Зависит от плагина, не всегда доступны опции |
| Полное отключение мини-корзины | Удаление виджета мини-корзины | Снимает нагрузку | Потеря UX, требуется замена функционала |