WooCommerce использует AJAX для обновления корзины, фильтров, кнопок добавления в корзину и других элементов без перезагрузки страницы. Это удобно, но иногда AJAX может вызывать конфликты с другими плагинами или замедлять сайт. В этой статье я подробно расскажу, как отключить AJAX в WooCommerce там, где это необходимо, без ущерба для функциональности вашего интернет-магазина.
Почему может понадобиться отключить AJAX в WooCommerce
Сценарии, когда отключение AJAX оправдано:
- Конфликты с кастомными скриптами или плагинами, приводящие к ошибкам на сайте.
- Проблемы с кэшированием страниц — AJAX-запросы могут не работать корректно со сторонними кэш-плагинами.
- Необходимость упростить отладку работы магазина, исключив динамическое обновление.
При этом важно не потерять ключевые функции, такие как обновление корзины, добавление товаров и фильтрация товаров.
Способы отключения AJAX в WooCommerce
Отключение AJAX добавления в корзину на страницах архива
По умолчанию WooCommerce использует AJAX для добавления товара в корзину прямо из каталога. Чтобы отключить эту функцию, добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:
add_filter('woocommerce_product_add_to_cart_url', 'wpstuff_disable_ajax_add_to_cart', 10, 2);
function wpstuff_disable_ajax_add_to_cart($url, $product) {
if (is_product_category() || is_shop()) {
return $product->get_permalink();
}
return $url;
}
add_filter('woocommerce_is_ajax_add_to_cart_enabled', '__return_false');Этот код отключит AJAX добавление товаров с архивных страниц, заменив кнопку на обычную ссылку на страницу товара.
Отключение AJAX обновления корзины
Обновление корзины без перезагрузки страницы — удобная функция, но иногда её нужно отключить. Для этого можно убрать обработчик AJAX в скриптах WooCommerce:
function wpstuff_dequeue_wc_cart_fragments() {
if (is_cart()) {
wp_dequeue_script('wc-cart-fragments');
}
}
add_action('wp_enqueue_scripts', 'wpstuff_dequeue_wc_cart_fragments', 99);Этот код отключит AJAX обновление корзины на странице корзины, заставляя её обновляться классическим способом после нажатия кнопки «Обновить корзину».
Отключение AJAX фильтров и пагинации
Если вы используете AJAX-фильтры или пагинацию, реализованные через плагины, которые вызывают конфликты, то можно отключить AJAX, заменив обработку на обычные переходы по ссылкам. Конкретный способ зависит от плагина, но в большинстве случаев достаточно отключить соответствующие опции в настройках. Если плагин не имеет такой опции, можно убрать его скрипты аналогично примеру с корзиной.
Пример: настройка плагина ABC Pagination
Плагин ABC Pagination позволяет гибко настраивать пагинацию. Если AJAX пагинация вызывает проблемы, можно переключиться на обычную пагинацию с помощью настроек плагина в админке, убрав галочку «Включить AJAX».
Как проверить, что AJAX отключён корректно
После внесения изменений обязательно проверьте:
- Добавление товара в корзину с архивных страниц происходит с полной перезагрузкой страницы.
- Обновление корзины на странице корзины требует нажатия кнопки и полной перезагрузки.
- Фильтры и пагинация работают без AJAX-запросов (проверьте в инструментах разработчика браузера, что нет XHR-запросов при клике).
Если всё работает как ожидается, значит отключение AJAX прошло успешно.
Дополнительные советы по оптимизации WooCommerce без AJAX
Использование плагина Clearfy Pro для управления скриптами
Clearfy Pro позволяет отключать ненужные скрипты WooCommerce на определённых страницах, что помогает улучшить скорость и устранить конфликты без полного отключения AJAX.
Оптимизация загрузки скриптов с помощью хуков
Вы можете отключать AJAX-скрипты выборочно для конкретных страниц, используя условные теги WordPress:
function wpstuff_dequeue_wc_ajax_scripts() {
if (is_checkout() || is_account_page()) {
return; // Оставляем AJAX там, где он критичен
}
wp_dequeue_script('wc-cart-fragments');
wp_dequeue_script('wc-add-to-cart');
}
add_action('wp_enqueue_scripts', 'wpstuff_dequeue_wc_ajax_scripts', 99);Такой подход позволяет сохранить функциональность там, где она действительно нужна, и отключить там, где AJAX мешает.
Заключение по теме отключения AJAX в WooCommerce
Отключение AJAX в WooCommerce — задача не всегда тривиальная, так как эта технология тесно интегрирована в разные части магазина. Однако, с помощью правильных фильтров, деактивации скриптов и грамотной настройки плагинов, можно отключить AJAX там, где он вызывает проблемы, не потеряв при этом важный функционал и удобство для пользователя.
Если вам нужна дополнительная автоматизация и настройка WooCommerce, рекомендую обратить внимание на плагины WPShop — они помогут настроить магазин под любые задачи быстро и без лишнего кода.