В процессе разработки WordPress сайтов часто возникает необходимость удалить или сбросить кэш AJAX-запросов. Кэширование — важный инструмент для повышения производительности, но при работе с динамическим контентом и AJAX оно может стать причиной устаревших данных, которые не обновляются в интерфейсе пользователя. В этой статье рассмотрим, как именно удалить кэш AJAX в WordPress, какие существуют нюансы, а также приведём примеры кода и рекомендации по плагинам.
Почему возникает кэширование AJAX-запросов в WordPress
AJAX-запросы в WordPress обычно обрабатываются через admin-ajax.php. По умолчанию WordPress не кеширует ответы AJAX, но многие плагины (например, кеширующие плагины, CDN, прокси-серверы) могут вмешиваться и сохранять результаты в кэш.
Кроме того, если вы используете Transients API или другие собственные методы кэширования в обработчиках AJAX, то нужно правильно очищать кэш, чтобы свежие данные отображались.
Основные причины кэширования AJAX-запросов:
- Кеширующие плагины (WP Super Cache, W3 Total Cache, LiteSpeed Cache и др.)
- CDN-сервисы (Cloudflare, BunnyCDN) могут кэшировать AJAX при неправильных настройках
- Транзиенты и другие методы кэширования на уровне PHP
Как проверить, что AJAX-запрос кэшируется
Перед тем как удалять кэш, нужно убедиться, что проблема именно в его наличии. Для этого:
- Откройте инструменты разработчика в браузере (F12), вкладка Network.
- Отправьте AJAX-запрос и посмотрите заголовки ответа. Если есть заголовки типа
age,x-cache, это указывает на кэш. - Попробуйте добавить параметр в URL запроса (например,
?nocache=1) и проверьте, изменится ли ответ.
Удаление кэша AJAX на стороне WordPress с помощью кода
Если кэш создаётся в коде плагина или темы, например, через Transients API, необходимо сбрасывать его при обновлении данных. Рассмотрим пример функции, которая удаляет transient с именем wproot_ajax_data:
function wproot_delete_ajax_cache() {
delete_transient('wproot_ajax_data');
}
Вызывать эту функцию нужно при обновлении данных, связанных с AJAX, например, при сохранении поста или обновлении настроек.
Для регистрации AJAX-обработчика без кэша можно использовать такой код:
add_action('wp_ajax_wproot_get_data', 'wproot_ajax_get_data');
add_action('wp_ajax_nopriv_wproot_get_data', 'wproot_ajax_get_data');
function wproot_ajax_get_data() {
// Не используем кэш, всегда свежие данные
$data = wproot_generate_fresh_data();
wp_send_json_success($data);
}
function wproot_generate_fresh_data() {
// Логика получения свежих данных
return ['time' => current_time('mysql')];
}
Как отключить кэширование AJAX в популярных кеширующих плагинах
WP Super Cache
WP Super Cache по умолчанию не кэширует admin-ajax.php, но если вы видите проблемы, убедитесь, что в настройках плагина включена опция Don't cache pages for known users.
Для исключения AJAX-запросов из кэша можно добавить в wp-config.php:
define('DONOTCACHEPAGE', true);
W3 Total Cache
В W3 Total Cache в настройках Page Cache есть пункт «Never cache pages for following URLs». Добавьте admin-ajax.php в этот список, чтобы исключить AJAX из кэша.
LiteSpeed Cache
LiteSpeed Cache также по умолчанию исключает AJAX, но для уверенности можно добавить правило исключения в настройках плагина в разделе Exclude.
Очистка кэша CDN для AJAX
При использовании CDN часто кэшируются и AJAX-запросы, что приводит к проблемам с обновлением данных. Чтобы избежать этого:
- Настройте правила кеширования на стороне CDN, чтобы исключить пути типа
/wp-admin/admin-ajax.php. - Добавьте заголовки
Cache-Control: no-cache, no-store, must-revalidateв ответ на AJAX-запросы.
Пример установки заголовков для предотвращения кэширования AJAX
add_action('wp_ajax_wproot_get_data', 'wproot_ajax_get_data');
add_action('wp_ajax_nopriv_wproot_get_data', 'wproot_ajax_get_data');
function wproot_ajax_get_data() {
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
$data = wproot_generate_fresh_data();
wp_send_json_success($data);
}
Рекомендации по использованию плагинов для управления кэшем AJAX
Для удобного управления кэшированием AJAX-запросов можно использовать плагины, которые поддерживают тонкую настройку:
- Clearfy Pro — позволяет управлять кэшированием и исключать из него различные запросы.
- ABC Pagination — если вы используете AJAX-пагинацию, этот плагин поможет настроить кэш.
Советы для разработчиков: как избежать проблем с кэшем AJAX
Чтобы минимизировать проблемы с кэшированием AJAX в WordPress, придерживайтесь следующих рекомендаций:
- Всегда добавляйте уникальные параметры к URL AJAX-запросов, например, временную метку или nonce.
- Используйте заголовки HTTP для запрета кэширования в ответах.
- Обрабатывайте кэш на уровне PHP — используйте Transients с контролем времени жизни и удалением.
- Проверяйте настройки кеширующих плагинов и CDN, чтобы исключить admin-ajax.php из кэша.
Заключение
Удаление и управление кэшем AJAX в WordPress — важная задача для поддержания динамичности сайта и корректного обновления данных. Правильная настройка плагинов, CDN и грамотное использование кэширования на уровне кода помогут избежать проблем и улучшить пользовательский опыт. Надеемся, приведённые рекомендации и примеры помогут вам быстро и эффективно решить вопросы с кэшированием AJAX.