Как отключить кэширование AJAX в WordPress: практические решения

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

Почему кэширование AJAX-запросов может мешать работе сайта

AJAX (Asynchronous JavaScript and XML) позволяет обновлять часть страницы без полной перезагрузки, что значительно улучшает UX. Однако если сервер или сторонние плагины кэшируют ответы на AJAX-запросы, это может привести к показу устаревших данных пользователям.

Например, при использовании плагинов кэширования (WP Rocket, W3 Total Cache, LiteSpeed Cache и других) AJAX-запросы могут попадать под кеширование, если не настроены правильно. Это особенно критично для сайтов с динамическим контентом: корзина интернет-магазина, лайки, комментарии, счетчики и прочее.

Кроме того, если AJAX-запросы используют REST API WordPress, то сервер может кэшировать JSON-ответы, что также приводит к задержкам обновления данных.

Как проверить, что AJAX-запросы кешируются

Перед тем как отключать кэширование, убедитесь, что именно оно является причиной проблемы. Для этого в инструментах разработчика браузера откройте вкладку «Network» и выполните AJAX-запрос на сайте.

  • Проверьте заголовки ответа: если есть заголовки Cache-Control, Expires или X-Cache, значит кэширование включено.
  • Попробуйте обновить запрос несколько раз и посмотрите, меняется ли ответ.
  • Отключите кэширование на уровне плагина, если у вас стоит кэш-плагин, и проверьте поведение.

Если вы видите, что результат долго не меняется, скорее всего, кэш мешает.

Как отключить кэширование AJAX-запросов в WordPress: основные методы

Метод 1. Отключение кэширования через заголовки в PHP

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

add_action('wp_ajax_wptemp_clear_ajax_cache', 'wptemp_clear_ajax_cache_handler');
add_action('wp_ajax_nopriv_wptemp_clear_ajax_cache', 'wptemp_clear_ajax_cache_handler');

function wptemp_clear_ajax_cache_handler() {
    // Отключаем кэширование браузером и прокси
    header('Cache-Control: no-cache, no-store, must-revalidate');
    header('Pragma: no-cache');
    header('Expires: 0');

    // Ваш код обработки AJAX-запроса
    wp_send_json_success(['time' => current_time('mysql')]);
}

Такой подход гарантирует, что браузер и промежуточные серверы не будут кэшировать ответ.

Метод 2. Исключение AJAX-запросов из кэширования плагинов

Если вы используете WP Rocket, W3 Total Cache или аналогичные, необходимо исключить AJAX-запросы из кэширования. Например, для WP Rocket сделайте следующее:

  • В настройках перейдите в раздел «Advanced Rules» (Расширенные правила).
  • В поле «Never Cache URLs» добавьте URL ваших AJAX-запросов — как правило, это admin-ajax.php или REST API эндпоинты.

Для LiteSpeed Cache через настройки исключите admin-ajax.php из кеша.

Это позволит плагину не кешировать динамические запросы и предотвратит появление устаревших данных.

Метод 3. Использование nonce и динамических параметров в AJAX-запросах

Добавление nonce и уникальных параметров (например, времени или случайного числа) к URL AJAX-запроса помогает избежать кэширования на стороне браузера и прокси.

Пример формирования AJAX-запроса с nonce и таймстампом:

function wptemp_enqueue_scripts() {
    wp_enqueue_script('wptemp-ajax-script', get_template_directory_uri() . '/js/ajax.js', ['jquery'], null, true);
    wp_localize_script('wptemp-ajax-script', 'wptemp_ajax_obj', [
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('wptemp_nonce_action')
    ]);
}
add_action('wp_enqueue_scripts', 'wptemp_enqueue_scripts');

В JavaScript добавим таймстамп:

jQuery(document).ready(function($) {
    function wptemp_send_ajax() {
        $.ajax({
            url: wptemp_ajax_obj.ajax_url,
            method: 'POST',
            data: {
                action: 'wptemp_clear_ajax_cache',
                _ajax_nonce: wptemp_ajax_obj.nonce,
                t: Date.now() // уникальный параметр для предотвращения кэширования
            },
            success: function(response) {
                console.log('Ответ сервера:', response);
            }
        });
    }
    wptemp_send_ajax();
});

Такой подход гарантирует, что каждый запрос уникален и не попадёт под кэш.

Пример решения с использованием плагина Clearfy Pro

Плагин Clearfy Pro предлагает множество опций для управления производительностью, включая оптимизацию и исключение AJAX-запросов из кэширования. В настройках Clearfy можно выбрать исключения для admin-ajax.php и REST API, что упрощает задачу без ручного вмешательства в код.

Особенности отключения кэширования для REST API AJAX-запросов

Современные темы и плагины часто используют REST API вместо классического admin-ajax.php. Кэширование REST API может привести к тем же проблемам. Чтобы отключить кэширование, можно использовать фильтр в WordPress:

add_filter('rest_post_dispatch', 'wptemp_disable_rest_cache', 10, 3);
function wptemp_disable_rest_cache($response, $server, $request) {
    if ($request->get_route() === '/wp/v2/posts') { // пример маршрута
        $response->header('Cache-Control', 'no-cache, no-store, must-revalidate');
        $response->header('Pragma', 'no-cache');
        $response->header('Expires', '0');
    }
    return $response;
}

Таким образом, вы контролируете кэширование REST API ответов для нужных маршрутов.

Подводим итоги и рекомендации по практике

Отключение кэширования AJAX-запросов — важный шаг для корректной работы динамического контента на WordPress-сайте. Главное — правильно определить источник кэша и применить соответствующее решение:

  • Добавляйте заголовки для запретов кэширования в обработчиках AJAX.
  • Исключайте AJAX-запросы из кеша плагинов.
  • Используйте nonce и уникальные параметры в URL для предотвращения кэширования.
  • Учитывайте особенности REST API и применяйте фильтры для контроля заголовков.

Для удобства и экономии времени можно использовать Clearfy Pro, который автоматизирует многие задачи по оптимизации и управлению кэшированием.

Как отключить кэширование AJAX в WordPress: практические решения
19.12.2025
Как создать и использовать шорткоды в WordPress
05.11.2025
Как использовать REST API для динамического обновления контента в WordPress
21.02.2026
Как настроить фильтры в WP REST API для сложных запросов
11.04.2026
Как удалить старые версии постов в WordPress
24.02.2026