Почему стоит отключить AJAX в WooCommerce
WooCommerce активно использует AJAX для обновления корзины, фильтров и некоторых элементов без перезагрузки страницы. Это удобно, но на крупных или плохо оптимизированных сайтах AJAX-запросы могут привести к нагрузке на сервер и замедлению отклика. В таких случаях отключение AJAX помогает улучшить производительность и снизить использование ресурсов.
Какие функции WooCommerce используют AJAX
- Обновление виджета корзины (mini cart)
- Фильтры товаров (например, с помощью плагинов)
- Добавление товара в корзину на странице архива или каталога
- Обновление количества товаров в корзине
Диагностика: как понять, что AJAX замедляет сайт
Для проверки влияния AJAX на производительность:
- Откройте консоль браузера (F12) и перейдите на вкладку Network.
- Обновите страницу и посмотрите количество AJAX-запросов (XHR). Если их десятки при простой загрузке, это тревожный знак.
- Используйте профилировщик, например Query Monitor, чтобы увидеть нагрузку на сервер при AJAX-запросах.
- Проверьте время отклика сервера на AJAX-запросы — если оно превышает 500 мс, стоит задуматься об оптимизации.
Пошаговое решение: как отключить AJAX в WooCommerce
1. Отключение AJAX для добавления товара в корзину на странице архива
По умолчанию WooCommerce добавляет товар в корзину без перезагрузки страницы с помощью AJAX. Чтобы отключить это, добавьте следующий код в functions.php вашей дочерней темы или в плагин для пользовательских функций:
function disable_woocommerce_ajax_add_to_cart() {
// Отключаем AJAX добавление в корзину на страницах архива
wp_dequeue_script('wc-add-to-cart');
}
add_action('wp_enqueue_scripts', 'disable_woocommerce_ajax_add_to_cart', 100);2. Отключение обновления мини-корзины через AJAX
Мини-корзина обновляется через AJAX при добавлении товаров. Чтобы отключить это, нужно отменить соответствующие хуки:
remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10);
// Можно заменить на обычную кнопку с перезагрузкой страницы
add_action('woocommerce_after_shop_loop_item', 'custom_add_to_cart_button', 10);
function custom_add_to_cart_button() {
global $product;
echo '<a href="' . esc_url($product->add_to_cart_url()) . '" class="button add_to_cart_button">Добавить в корзину</a>';
}3. Отключение AJAX в виджетах и других местах
Если используете сторонние плагины с AJAX, их нужно настраивать отдельно или отключать скрипты через wp_dequeue_script по аналогии с выше.
Проверка результата после внедрения
- Очистите кэш сайта и браузера.
- Перейдите на страницу каталога и попробуйте добавить товар в корзину — страница должна перезагружаться и корзина обновляться без AJAX.
- Откройте консоль разработчика и на вкладке Network проверьте отсутствие XHR запросов при добавлении в корзину.
- Используйте Query Monitor или аналогичный плагин, чтобы убедиться, что AJAX-запросы больше не выполняются.
Частые ошибки и как исправить
- Кнопка «Добавить в корзину» не работает после отключения AJAX. Проверьте, что ссылка ведёт на URL добавления товара с правильными параметрами, а не просто вызывает JS-функцию.
- Страница не перезагружается при добавлении товара. Возможно, конфликт с кэшированием или плагинами оптимизации. Исключите страницы WooCommerce из кэширования.
- Мини-корзина не обновляется после добавления товара. Решение — либо отключить мини-корзину, либо использовать стандартное обновление страницы.
Практические советы по безопасности и производительности
- Кэширование. Отключение AJAX хорошо совмещать с грамотным кэшированием страниц и объектов, чтобы снизить нагрузку.
- Минимизация скриптов. Удаление ненужных AJAX-скриптов снижает размер страницы и ускоряет загрузку.
- Обновления WooCommerce. После обновления проверяйте, не включили ли разработчики обратно AJAX-функции, и при необходимости повторяйте настройку.
Сравнение вариантов отключения AJAX в WooCommerce
| Вариант | Плюсы | Минусы | Применимость |
|---|---|---|---|
| Отключение через wp_dequeue_script | Простота, быстрое отключение AJAX | Может сломать UX (нет обновлений без перезагрузки) | Малые и средние сайты с проблемами производительности |
| Отключение через хуки и замену кнопок | Точный контроль, возможность кастомизации | Требует знаний PHP и WooCommerce API | Продвинутые пользователи и разработчики |
| Использование плагинов для контроля AJAX | Удобство настройки, без кода | Зависимость от стороннего кода, возможные конфликты | Для тех, кто не хочет писать код |