Как отключить AJAX в WooCommerce для оптимизации производительности

Почему стоит отключать AJAX в WooCommerce?

WooCommerce использует AJAX для обновления корзины, фильтров, мини-корзины и других элементов без перезагрузки страницы. Это улучшает пользовательский опыт, но при высокой нагрузке может привести к значительной нагрузке на сервер и замедлению сайта, особенно на shared-хостингах и при большом числе одновременных пользователей.

Отключение AJAX там, где он не критичен, помогает снизить количество запросов к серверу и улучшить производительность сайта.

Диагностика: как проверить, что AJAX вызывает нагрузку

  • Включите мониторинг запросов в браузере (вкладка Network) и посмотрите, сколько ajax-запросов посылается при работе с корзиной и фильтрами.
  • Используйте инструменты профилирования, например New Relic или Query Monitor, чтобы отследить нагрузку на admin-ajax.php.
  • Обратите внимание на частоту и длительность ajax-запросов в WooCommerce в пиковые часы.

Пошаговое отключение AJAX в WooCommerce

1. Отключение AJAX для обновления мини-корзины

Мини-корзина обновляется с помощью AJAX по умолчанию. Чтобы отключить это, добавьте следующий код в functions.php вашей темы или в плагин-сниппет:

add_filter('woocommerce_add_to_cart_fragments', function($fragments) { return []; });

Этот фильтр предотвращает обновление мини-корзины через AJAX.

2. Отключение AJAX для фильтров и сортировки

Если вы используете AJAX для фильтрации товаров, можно переключиться на классическую перезагрузку страницы. Для этого во многих темах и плагинах фильтра отключается соответствующая опция. Если нет, используйте следующий пример для отключения AJAX в WooCommerce Product Filter:

add_filter('woocommerce_layered_nav_link', function($link) { return str_replace('javascript:void(0);', $link, $link); });

Или просто переключитесь в настройках плагина фильтра на режим без AJAX.

3. Отключение AJAX добавления товара в корзину на архивных страницах

Для отключения AJAX добавления в корзину на страницах каталога добавьте в functions.php:

add_filter('woocommerce_loop_add_to_cart_link', function($html) {</code><br><code>    // Удаляем атрибут data-quantity и класс ajax_add_to_cart</code><br><code>    $html = preg_replace('/data-quantity="[^"]*"/', '', $html);</code><br><code>    $html = str_replace('ajax_add_to_cart', '', $html);</code><br><code>    return $html;</code><br><code>}, 10);

Как проверить, что отключение AJAX сработало

  • Зайдите в браузер, включите вкладку «Network» в инструментах разработчика.
  • Выполните действия: добавление товара в корзину, обновление корзины, применение фильтров.
  • Убедитесь, что нет запросов к admin-ajax.php или что они существенно уменьшились.
  • Проверьте работу корзины и фильтров — они должны работать с перезагрузкой страницы.

Частые ошибки при отключении AJAX и их исправление

  • Ошибка: Мини-корзина не обновляется после добавления товара.
    Решение: Проверьте, отключён ли фильтр woocommerce_add_to_cart_fragments. При необходимости добавьте JavaScript для обновления страницы после добавления товара.
  • Ошибка: Фильтры перестали работать.
    Решение: Убедитесь, что фильтры переключены в режим с перезагрузкой страницы, а не AJAX. Проверьте настройки используемых плагинов фильтрации.
  • Ошибка: Добавление товара не работает.
    Решение: Проверьте, удалён ли класс ajax_add_to_cart и атрибут data-quantity корректно, иначе WooCommerce может пытаться выполнить AJAX-запрос.

Практические советы по безопасности и производительности

  • Отключение AJAX снижает нагрузку на admin-ajax.php, что уменьшает вероятность DDoS-атак, связанных с этим ресурсом.
  • Используйте кэширование страниц (например, с помощью плагинов WP Rocket, LiteSpeed Cache, или встроенных в сервер) для ускорения работы после отключения AJAX.
  • Для сложных фильтров и сортировки рассмотрите использование серверного кэширования результатов или индексирования с помощью ElasticSearch или Algolia.
  • Обязательно тестируйте изменения в staging-среде перед внедрением на живой сайт.

Сравнение способов отключения AJAX в WooCommerce

МетодПлюсыМинусы
Отключение через фильтр woocommerce_add_to_cart_fragmentsПростота реализации, уменьшение AJAX-запросовМини-корзина не обновляется без перезагрузки
Удаление класса ajax_add_to_cart на кнопкахОтключение AJAX добавления товараПользователь видит перезагрузку страницы
Отключение AJAX фильтров в настройках плагинаКонтроль через UI, минимальные изменения кодаЗависимость от возможностей плагина
Как удалить или изменить автора старой записи в WordPress
13.01.2026
Как создать пользовательские роли в WordPress с примером кода
03.12.2025
Как использовать AJAX в WordPress для отображения сообщений об ошибках без перезагрузки страницы
08.12.2025
Как добавить автоматическое удаление старого контента в WordPress
09.01.2026
Двухэтапная авторизация в WordPress без плагинов: практическое руководство
05.07.2026