Что такое AJAX-запросы в WordPress и зачем их удалять
AJAX-запросы в WordPress — это асинхронные вызовы, которые позволяют сайту обновлять часть страницы без полной перезагрузки. Они широко используются для улучшения взаимодействия с пользователем: динамическая загрузка контента, отправка форм, обновление корзины в WooCommerce и многое другое.
Однако не все AJAX-запросы нужны на каждом сайте. Некоторые темы и плагины добавляют собственные AJAX-вызовы, которые могут оказаться избыточными или замедлять работу сайта. Удаление ненужных AJAX-запросов помогает снизить нагрузку на сервер и уменьшить количество сетевых запросов, что в итоге улучшает скорость загрузки страниц и пользовательский опыт.
В этой статье мы разберем, как найти и удалить ненужные AJAX-запросы в WordPress, используя примеры кода и полезные плагины.
Как выявить ненужные AJAX-запросы в WordPress
Для начала нужно понять, какие именно AJAX-запросы выполняются на вашем сайте. Это можно сделать несколькими способами:
- Инструменты разработчика браузера (DevTools): вкладка Network позволяет отследить все запросы, включая AJAX. Фильтруйте по XHR, чтобы увидеть только AJAX-запросы.
- Плагины для мониторинга запросов: например, Query Monitor отображает текущие AJAX-запросы и их обработчики.
- Просмотр исходного кода темы и плагинов: ищите хуки
wp_ajax_иwp_ajax_nopriv_, которые регистрируют обработчики AJAX.
После сбора информации составьте список ненужных AJAX-запросов, которые вы хотите отключить.
Удаление AJAX-запросов стандартных плагинов и тем
Часто темы и плагины добавляют свои AJAX-запросы через хуки add_action('wp_ajax_...') и add_action('wp_ajax_nopriv_...'). Чтобы отключить обработчик, можно удалить соответствующий хук.
Пример функции для удаления AJAX-обработчиков:
function wpskills_remove_ajax_actions() {
// Удаляем обработчик, зарегистрированный плагином или темой
remove_action('wp_ajax_myplugin_action', 'myplugin_ajax_handler');
remove_action('wp_ajax_nopriv_myplugin_action', 'myplugin_ajax_handler');
}
add_action('init', 'wpskills_remove_ajax_actions');В этом примере мы удаляем AJAX-обработчики для действия myplugin_action. Чтобы использовать этот метод, нужно знать точные имена действий и функций-обработчиков. Они обычно прописаны в файлах плагинов или темы.
Практический пример: отключение AJAX-запроса для wishlist в WooCommerce
Если у вас установлен плагин wishlist с AJAX-поддержкой, и вы хотите отключить его AJAX-запросы, можно сделать так:
function wpskills_disable_wishlist_ajax() {
remove_action('wp_ajax_woocommerce_wishlist_add', 'woocommerce_wishlist_add_callback');
remove_action('wp_ajax_nopriv_woocommerce_wishlist_add', 'woocommerce_wishlist_add_callback');
}
add_action('init', 'wpskills_disable_wishlist_ajax');Таким образом, запросы на добавление товара в wishlist через AJAX перестанут работать, и можно реализовать альтернативный способ работы.
Отключение AJAX-запросов путем удаления скриптов JavaScript
Иногда AJAX-запросы запускаются из определенных скриптов, которые можно просто не подключать к странице. Например, некоторые темы или плагины добавляют скрипты с AJAX функционалом, которые не нужны на всех страницах.
Для удаления скриптов используйте функцию wp_dequeue_script или wp_deregister_script. Пример:
function wpskills_remove_ajax_scripts() {
// Удаляем скрипт с AJAX функционалом
wp_dequeue_script('myplugin-ajax-js');
wp_deregister_script('myplugin-ajax-js');
}
add_action('wp_enqueue_scripts', 'wpskills_remove_ajax_scripts', 100);Узнать ID скрипта можно, посмотрев в исходный код страницы или в файлы плагина/темы.
Совет: условное отключение AJAX для конкретных страниц
Чтобы не ломать функционал сайта, лучше отключать AJAX-запросы только на тех страницах, где они не нужны. Например:
function wpskills_conditional_ajax_removal() {
if (is_page('kontakt')) { // замените на нужный slug или условие
wp_dequeue_script('myplugin-ajax-js');
wp_deregister_script('myplugin-ajax-js');
}
}
add_action('wp_enqueue_scripts', 'wpskills_conditional_ajax_removal', 100);Использование плагинов для управления AJAX-запросами
Если вы не хотите копаться в коде, можно воспользоваться специальными плагинами, которые позволяют отключать ненужные скрипты и AJAX-запросы:
- Asset CleanUp — позволяет отключать скрипты и стили на отдельных страницах.
- Perfmatters — платный плагин с возможностью отключать запросы и скрипты, в том числе AJAX.
- Query Monitor — помогает найти и проанализировать AJAX-запросы, чтобы понять, какие отключать.
Плагины облегчают управление, но требуют внимательного подхода, чтобы не сломать функционал сайта.
Как написать свой фильтр для AJAX-запросов в WordPress
В некоторых случаях полезно перехватывать AJAX-запросы и модифицировать их поведение, прежде чем полностью отключать. Это можно сделать, добавив свой обработчик с приоритетом выше, или изменив логику в существующем.
Пример перехвата и модификации AJAX-запроса:
function wpskills_override_ajax_handler() {
// Проверяем, какой AJAX-запрос вызывается
if (isset($_POST['action']) && $_POST['action'] === 'myplugin_action') {
// Своя логика вместо стандартной
wp_send_json_success(['message' => 'Запрос обработан кастомно']);
wp_die();
}
}
add_action('wp_ajax_myplugin_action', 'wpskills_override_ajax_handler', 0);
add_action('wp_ajax_nopriv_myplugin_action', 'wpskills_override_ajax_handler', 0);Здесь мы перехватываем запрос с действием myplugin_action и возвращаем свой ответ, отключая стандартную обработку.
Заключение: практика и тестирование при удалении AJAX-запросов
Удаление AJAX-запросов требует аккуратного подхода, чтобы не повредить важный функционал сайта. Рекомендуется:
- Тщательно анализировать, какие запросы действительно не нужны.
- Использовать инструменты мониторинга для проверки работы сайта после изменений.
- Писать резервные копии и тестировать на тестовом сервере.
С помощью предложенных практик и примеров кода вы сможете эффективно оптимизировать работу WordPress, удаляя лишние AJAX-запросы и улучшая производительность сайта.