Почему стоит отключить AJAX в WooCommerce
WooCommerce использует AJAX на многих элементах фронтенда: фильтры, корзина, обновление количества товаров, отображение товаров в каталоге. Это повышает интерактивность, но в некоторых случаях приводит к излишней нагрузке и замедлению загрузки страниц, особенно на слабых хостингах и при большом количестве товаров.
Отключение AJAX поможет уменьшить количество запросов к серверу, снизить использование ресурсов и ускорить загрузку страниц, если интерактивность не критична для вашего магазина.
Диагностика: как понять, что AJAX тормозит сайт
- Откройте DevTools в браузере (F12) и перейдите на вкладку Network.
- Перезагрузите страницу каталога или корзины WooCommerce.
- Обратите внимание на количество AJAX-запросов (XHR) и время их обработки.
- Если много AJAX-запросов, и они занимают значительное время, это повод для оптимизации.
- Проверьте нагрузку на сервер во время взаимодействия с сайтом (например, через панель хостинга или инструменты мониторинга сервера).
Пошаговое отключение AJAX в WooCommerce
Отключение AJAX обновления корзины
По умолчанию WooCommerce обновляет корзину через AJAX при изменении количества товаров. Чтобы отключить это, добавьте следующий код в functions.php вашей темы или в плагин для кастомного кода:
add_filter('woocommerce_cart_item_quantity', 'disable_ajax_cart_quantity', 10, 3);
function disable_ajax_cart_quantity($product_quantity, $cart_item_key, $cart_item) {
// Возвращаем стандартный input без AJAX
return str_replace('class="qty ajax_quantity"', 'class="qty"', $product_quantity);
}Этот код убирает класс, по которому WooCommerce активирует AJAX-обновление количества товара.
Отключение AJAX фильтров и пагинации
Если у вас установлены фильтры или пагинация с AJAX (например, через темы или плагины), их можно отключить настройками плагина или добавить JavaScript для загрузки страниц без AJAX. Часто это делается путем удаления соответствующих скриптов.
Для стандартного WooCommerce можно убрать поддержку AJAX для фильтрации таким образом:
add_filter('woocommerce_layered_nav_link', 'disable_ajax_layered_nav_link', 10, 2);
function disable_ajax_layered_nav_link($link, $term) {
// Убираем обработчик AJAX, чтобы переход был обычным
return preg_replace('/onclick="[^\"]+"/', '', $link);
}Проверка результата после отключения AJAX
- Загрузите страницу каталога и корзины, убедитесь, что изменения количества товара приводят к полной перезагрузке страницы, а не к AJAX-запросу.
- Проверьте в DevTools вкладку Network, что нет XHR-запросов при изменении количества или фильтрации.
- Оцените скорость загрузки страниц «до» и «после» с помощью Google PageSpeed Insights или других инструментов.
- Проверьте работу всех функций магазина: добавление товаров в корзину, изменение количества, фильтрация, пагинация — чтобы не было сбоев.
Частые ошибки при отключении AJAX в WooCommerce и как их исправить
- Ошибка: При отключении AJAX корзина перестала обновляться корректно.
Причина: Некоторые темы или плагины требуют AJAX для нормальной работы. Отключение без адаптации кода приводит к ошибкам.
Решение: Проверьте консоль браузера на ошибки JavaScript, при необходимости доработайте шаблоны корзины. - Ошибка: После отключения AJAX фильтров страница не обновляется или фильтрация не работает.
Причина: Плагины фильтров ожидают AJAX.
Решение: В настройках плагина отключите AJAX, либо замените плагин на более простой. - Ошибка: Некорректное отображение количества товаров после отключения AJAX.
Причина: Кэширование страниц или скриптов.
Решение: Очистите кэш браузера и сервера, отключите плагин кеширования и проверьте повторно.
Практические советы по безопасности и производительности при отключении AJAX
- Отключая AJAX, вы уменьшаете количество запросов, что снижает нагрузку на сервер и уменьшает вероятность DDoS-атак через AJAX-запросы.
- Обязательно контролируйте кэширование страниц в сочетании с отключением AJAX, чтобы не получить устаревшие данные в корзине или фильтрах.
- Используйте чистый и оптимизированный код для замены AJAX-функционала, чтобы избежать лишних запросов и ошибок.
- Перед внесением изменений делайте резервные копии сайта и базы данных.
Сравнение способов отключения AJAX в WooCommerce
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| Отключение через код (functions.php) | Полный контроль, бесплатно | Требует навыков, может сломать функционал | Тестировать на тестовом сайте |
| Отключение через настройки плагинов фильтров и тем | Просто, без кода | Не всегда доступно, зависит от реализации | Использовать совместимые плагины |
| Использование плагинов оптимизации, блокирующих AJAX | Автоматизация, дополнительные функции | Дополнительная нагрузка, возможно несовместимость | Выбирать проверенные решения, например Clearfy Pro от WPShop |