WooCommerce активно использует AJAX для динамического обновления корзины, фильтров и других элементов без перезагрузки страницы. Однако в некоторых случаях это может негативно сказаться на производительности сайта, особенно при большом количестве посетителей или при использовании специфических кастомизаций. В этой статье разберём, как отключить AJAX в WooCommerce, какие есть варианты, и приведём примеры кода для решения этой задачи.
Почему стоит отключать AJAX в WooCommerce?
AJAX позволяет обновлять части страницы без её полной перезагрузки, что улучшает пользовательский опыт. Но при этом AJAX-запросы создают дополнительную нагрузку на сервер, особенно если они вызываются часто или при большом трафике. Также AJAX может конфликтовать с некоторыми плагинами и кастомными скриптами, приводя к ошибкам в работе магазина.
Если у вас небольшой магазин или вы используете сторонние оптимизационные плагины, отключение AJAX может помочь снизить нагрузку и повысить стабильность.
Кроме того, отключение AJAX полезно, если вы хотите добиться более предсказуемого поведения на сайте — например, чтобы при добавлении товара в корзину происходила полная перезагрузка страницы.
Как отключить AJAX добавление в корзину в WooCommerce
По умолчанию WooCommerce использует AJAX для добавления товаров в корзину на страницах архива и каталога. Чтобы отключить эту функцию, можно добавить следующий код в файл functions.php вашей темы или в кастомный плагин:
add_filter('woocommerce_add_to_cart_fragments', '__return_empty_array');
add_action('wp_enqueue_scripts', function() {
if (function_exists('is_product') && !is_product()) {
wp_dequeue_script('wc-add-to-cart');
}
}, 99);
Объяснение:
woocommerce_add_to_cart_fragments— фильтр, который отвечает за обновление элементов корзины через AJAX. Возвращая пустой массив, мы отключаем обновления.wp_dequeue_script('wc-add-to-cart')— отключает скрипт, отвечающий за AJAX добавление в корзину на страницах, кроме страниц отдельных товаров.
Если вы хотите, чтобы добавление в корзину на странице товара также происходило без AJAX, можно убрать поддержку AJAX в шаблонах и использовать стандартную отправку формы.
Отключение AJAX обновления мини-корзины
Мини-корзина на сайте WooCommerce тоже обновляется через AJAX, что может создавать дополнительную нагрузку. Чтобы отключить это, используйте следующий код:
add_filter('woocommerce_cart_item_thumbnail', function($image, $cart_item, $cart_item_key) {
remove_action('wp_footer', 'woocommerce_cart_fragments', 20);
return $image;
}, 10, 3);
Однако этот способ не самый оптимальный, так как может вызвать проблемы с мини-корзиной. Лучше полностью отключить скрипты AJAX обновления мини-корзины:
add_action('wp_enqueue_scripts', function() {
wp_dequeue_script('wc-cart-fragments');
}, 99);
Это отключит AJAX обновление мини-корзины и уберёт лишние запросы при загрузке страниц.
Влияние отключения AJAX на UX и SEO
Отключение AJAX может привести к увеличению количества полных перезагрузок страниц, что снижает плавность взаимодействия пользователя с сайтом. Однако при правильной оптимизации и использовании кеширования это не будет критично.
С точки зрения SEO, отключение AJAX не повредит, а в некоторых случаях даже улучшит индексацию, так как контент становится доступен без дополнительных скриптов.
Практические советы по оптимизации WooCommerce с отключённым AJAX
- Используйте качественное кеширование страниц (например, с помощью плагинов Clearfy Pro или других решений).
- Обязательно тестируйте работу корзины и оформления заказа после отключения AJAX, чтобы убедиться, что все работает корректно.
- Если у вас установлен плагин WPRemark, он может помочь в организации отзывов без AJAX, что снизит нагрузку.
- Оптимизируйте изображения и используйте CDN для ускорения загрузки страниц.
Дополнительные методы контроля AJAX в WooCommerce
Если вам нужно selectively отключить AJAX на отдельных страницах или для определённых действий, можно использовать условные конструкции:
add_action('wp_enqueue_scripts', function() {
if (is_shop() || is_product_category()) {
wp_dequeue_script('wc-add-to-cart');
wp_dequeue_script('wc-cart-fragments');
}
}, 99);
Это позволит отключить AJAX только на страницах магазина и категорий, оставив его активным на страницах товаров.
Выводы
Отключение AJAX в WooCommerce — эффективный способ снизить нагрузку на сервер и повысить стабильность магазина, особенно при большом трафике или нестабильной работе плагинов. Важно тщательно тестировать все изменения и учитывать влияние на пользовательский опыт.
Для упрощения работы рекомендуем использовать проверенные решения и плагины из WPShop, которые помогут вам добиться оптимальной производительности и функциональности.