AJAX-запросы в WordPress широко используются для обновления данных на странице без её перезагрузки. Однако в некоторых случаях чрезмерное или неконтролируемое использование AJAX может замедлять работу сайта и приводить к излишней нагрузке на сервер. В этой статье мы подробно разберём, как отключить или ограничить AJAX-запросы в WordPress, когда это действительно нужно, и как сделать это безопасно и эффективно.
Почему важно контролировать AJAX-запросы в WordPress
AJAX-запросы позволяют динамически загружать контент, что улучшает пользовательский опыт. Но при этом:
- Чрезмерное количество AJAX-вызовов может увеличить нагрузку на сервер.
- Некорректные реализации могут привести к утечкам данных или ошибкам.
- Некоторые сторонние плагины создают ненужные AJAX-запросы, которые можно отключить для оптимизации.
Контроль AJAX-запросов особенно важен на сайтах с большим трафиком или ограниченными ресурсами хостинга.
Как выявить ненужные AJAX-запросы
Перед тем, как что-то отключать, важно понять, какие AJAX-вызовы действительно нагружают сайт. Для этого можно использовать инструменты браузера (например, вкладка Network в Chrome DevTools) и плагины мониторинга.
Также поможет плагин Query Monitor, который показывает AJAX-запросы и их время выполнения.
После анализа вы сможете составить список запросов, которые можно отключить или ограничить.
Отключение AJAX-запросов, создаваемых плагинами и темами
Часто плагины добавляют свои AJAX-обработчики через хуки wp_ajax_ и wp_ajax_nopriv_. Чтобы отключить ненужные запросы, можно убрать эти обработчики с помощью функции удаления экшенов.
Пример функции для отключения AJAX-обработчика из плагина или темы:
function wproot_remove_unnecessary_ajax() {
// Замените 'plugin_ajax_action' на имя вашего ajax action
remove_action('wp_ajax_plugin_ajax_action', 'plugin_ajax_handler');
remove_action('wp_ajax_nopriv_plugin_ajax_action', 'plugin_ajax_handler');
}
add_action('init', 'wproot_remove_unnecessary_ajax');Важно: Названия экшенов нужно точно знать — их можно найти в коде плагина или темы.
Как найти имена AJAX-экшенов
Обычно в коде плагинов ищите такие конструкции:
add_action('wp_ajax_some_action', 'some_function');
add_action('wp_ajax_nopriv_some_action', 'some_function');Имена «some_action» — это и есть названия AJAX-экшенов.
Ограничение частоты AJAX-запросов с помощью nonce и проверки прав
Чтобы избежать злоупотреблений AJAX-запросами, желательно всегда использовать защиту через wp_create_nonce и проверять права пользователя.
Пример проверки nonce в обработчике AJAX:
function wproot_ajax_handler() {
check_ajax_referer('wproot_nonce_action', 'security');
if (!current_user_can('edit_posts')) {
wp_send_json_error('Нет доступа');
}
// Логика обработки запроса
wp_send_json_success(array('message' => 'Успех'));
}
add_action('wp_ajax_wproot_action', 'wproot_ajax_handler');Если плагин не использует nonce, вы можете добавить дополнительную проверку в свой код или ограничить запросы полностью.
Использование плагинов для контроля AJAX и оптимизации
Для удобства контроля AJAX-запросов можно использовать специальные плагины:
- Clearfy Pro — позволяет отключать ненужные AJAX-запросы и скрипты, улучшая скорость загрузки. Подробнее: https://wpshop.ru/plugins/clearfy-pro/.
- WP Rocket — плагин кеширования с функцией оптимизации запросов.
- Asset CleanUp — позволяет selectively отключать скрипты и стили, включая AJAX.
Интеграция с Clearfy Pro особенно полезна на сайтах, где много плагинов и тем, генерирующих AJAX-запросы.
Практический пример: отключение AJAX-запроса счетчика просмотров
Многие плагины показывают счётчик просмотров через AJAX. Если вам не нужен этот функционал, его можно отключить.
Пример отключения AJAX-счётчика просмотров:
function wproot_disable_views_counter_ajax() {
remove_action('wp_ajax_update_post_views', 'update_post_views_callback');
remove_action('wp_ajax_nopriv_update_post_views', 'update_post_views_callback');
}
add_action('init', 'wproot_disable_views_counter_ajax');Этот код нужно адаптировать под конкретный плагин, заменив имена экшенов на реальные.
Советы по безопасной работе с AJAX в WordPress
Чтобы не ухудшать производительность и безопасность сайта, следуйте рекомендациям:
- Не отключайте AJAX-запросы, если не уверены, к чему они относятся.
- Всегда проверяйте nonce и права пользователя в обработчиках.
- Оптимизируйте логику AJAX-обработчиков, чтобы они выполнялись быстро.
- Используйте кеширование на уровне сервера и плагинов.
- Отключайте AJAX-запросы только после тщательного анализа.