Как отключить скрипт admin-ajax.php в WooCommerce для оптимизации производительности

Что такое admin-ajax.php и почему он замедляет WooCommerce

Файл admin-ajax.php используется WordPress и WooCommerce для обработки AJAX-запросов, таких как обновление корзины, проверка наличия товара, уведомления и другие динамические функции. Однако на крупных или нагруженных сайтах чрезмерное количество AJAX-запросов приводит к значительной нагрузке на сервер и замедлению работы сайта.

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

Диагностика: как проверить нагрузку от admin-ajax.php

Для анализа нагрузки и частоты AJAX-запросов используйте следующие методы:

  • Откройте браузер, перейдите в Инструменты разработчика → Сеть (Network) и отфильтруйте запросы по admin-ajax.php. Проверьте, как часто они выполняются и с какими параметрами.
  • Используйте плагины для мониторинга запросов, например Query Monitor, чтобы увидеть, сколько запросов и сколько времени занимает каждый.
  • Проверьте журнал сервера (access.log), чтобы определить количество запросов к admin-ajax.php.

Пошаговое отключение admin-ajax.php на фронтенде WooCommerce

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

Шаг 1. Добавьте код для отключения скрипта

В файл functions.php вашей дочерней темы или в пользовательский плагин вставьте следующий код:

function disable_woocommerce_admin_ajax_scripts() {
    if ( function_exists('is_woocommerce') ) {
        // Оставляем скрипт только на страницах корзины и оформления заказа
        if ( ! is_cart() && ! is_checkout() ) {
            wp_dequeue_script('wc-cart-fragments');
            wp_deregister_script('wc-cart-fragments');
        }
    }
}
add_action('wp_enqueue_scripts', 'disable_woocommerce_admin_ajax_scripts', 99);

Здесь wc-cart-fragments — скрипт WooCommerce, который отвечает за AJAX-обновление корзины и вызывает обращения к admin-ajax.php.

Шаг 2. Убедитесь, что AJAX-функции на корзине и оформлении заказа работают корректно

Этот код не отключит AJAX на страницах корзины (is_cart()) и оформления заказа (is_checkout()), где он необходим для обновления информации в реальном времени.

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

  • Откройте любую страницу сайта, кроме корзины и чекаута, и в консоли браузера во вкладке Сеть проверьте отсутствие запросов к admin-ajax.php.
  • Перейдите на страницу корзины и оформления заказа, убедитесь, что корзина обновляется без перезагрузки и AJAX-запросы работают.
  • Используйте Query Monitor или аналогичный инструмент для мониторинга количества запросов на разных страницах.

Частые ошибки и как их исправить

  • Отключение скрипта вызывает ошибки на корзине или оформлении заказа. Проверьте условие if ( ! is_cart() && ! is_checkout() ). Возможно, у вас нестандартные URL или кастомные страницы — добавьте их в условие.
  • Скрипт не отключается. Убедитесь, что ваш код подключается после WooCommerce (приоритет 99). Если тема или плагин подключают скрипты с более высоким приоритетом, увеличьте число приоритета.
  • Отсутствие обновления корзины. Если отключили wc-cart-fragments на страницах, где это необходимо, верните загрузку скрипта.

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

  • Используйте кеширование страниц (например, через плагин WP Rocket или серверный кеш), чтобы снизить количество PHP-запросов.
  • Минимизируйте количество плагинов, которые используют AJAX запросы на всех страницах.
  • Если нужны AJAX-функции, реализуйте их через REST API вместо admin-ajax.php — это современный и более производительный способ.
  • Регулярно обновляйте WooCommerce и WordPress, чтобы избежать уязвимостей в AJAX-обработчиках.

Сравнение вариантов отключения admin-ajax.php в WooCommerce

СпособПреимуществаНедостатки
Отключение скрипта wc-cart-fragments на всех страницах, кроме корзины и чекаутаЗначительное снижение AJAX-запросов, простота реализацииМожет не подойти, если AJAX используется на других страницах
Полное отключение admin-ajax.php (через фильтры или плагины)Максимальное снижение нагрузкиПотеря всех AJAX-функций WooCommerce и других плагинов
Переписать AJAX на REST APIОптимальная производительность и безопасностьТребуется разработка и тестирование
Как использовать хуки для автоматического изменения статусов заказов WooCommerce
27.04.2026
Автоматическое удаление товаров из заказов WooCommerce после отмены или возврата
12.05.2026
Как создать уникальный AJAX-фильтр для WooCommerce по пользовательским атрибутам
10.04.2026
Автоматическое удаление товаров из заказов WooCommerce после отмены или возврата
04.05.2026
Как добавить OTP (одноразовый пароль) в формы WordPress для повышения безопасности
22.02.2026