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

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

Почему возникает жёсткое кэширование AJAX в WordPress

Кэширование — важный элемент оптимизации производительности сайта. Обычно WordPress и плагины используют кэширование страниц, объектов и запросов, чтобы ускорить загрузку. Но AJAX запросы должны быть всегда «свежими», так как от них зависит интерактивность и актуальность данных.

Проблема возникает, когда сервер, прокси (например, Varnish, Cloudflare) или плагины кэшируют AJAX ответы, несмотря на то, что они должны быть исключены из кэширования. Это приводит к тому, что пользователь получает старые данные.

Кроме того, некоторые темы или плагины могут некорректно обрабатывать AJAX запросы, например, неправильно выставлять HTTP заголовки кэширования.

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

  • Откройте инструменты разработчика в браузере (F12) и перейдите на вкладку Network.
  • Отправьте AJAX запрос (например, вызовите функционал, который обновляет часть страницы).
  • Посмотрите заголовки ответа. Если есть заголовок Cache-Control с директивами типа max-age или public, это может указывать на кэширование.
  • Если данные не меняются при повторных запросах, скорее всего, кэширование действительно происходит.

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

Самый простой и надёжный способ — правильно настроить заголовки HTTP для AJAX ответов. WordPress AJAX запросы обычно идут по адресу admin-ajax.php и используют параметр action. Мы можем добавить фильтр, который отключит кэширование для этих запросов.

function wpfind_disable_ajax_cache() {
    if (defined('DOING_AJAX') && DOING_AJAX) {
        nocache_headers(); // отключает кэширование
    }
}
add_action('send_headers', 'wpfind_disable_ajax_cache');

Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин.

Функция nocache_headers() выставляет необходимые HTTP заголовки, запрещающие кэширование. Это помогает предотвратить кэширование на уровне браузера и большинства серверов.

Однако иногда прокси-серверы или CDN (например, Cloudflare) игнорируют эти заголовки. В таком случае нужно настроить правила исключения для admin-ajax.php на стороне CDN.

Пример настройки исключения в Cloudflare

В панели управления Cloudflare зайдите в раздел Page Rules и добавьте правило для URL https://ваш_домен/admin-ajax.php*, где укажите опцию «Bypass cache».

Плагины для управления кэшированием AJAX запросов

Если вы используете плагины кэширования, есть смысл проверить их настройки и возможности:

  • WP Rocket — в настройках есть опция исключения AJAX URL из кэширования. Обычно admin-ajax.php исключён по умолчанию, но стоит проверить.
  • W3 Total Cache — в разделе Page Cache можно добавить исключения по URL.
  • LiteSpeed Cache — также поддерживает правила для исключения AJAX запросов.

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

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

Как добавить заголовки для REST API запросов

Если вы используете REST API, аналогичная проблема может возникать и там. Чтобы отключить кэширование для REST API ответов, можно использовать фильтр:

function wpfind_disable_rest_cache($response, $server, $request) {
    $response->header('Cache-Control', 'no-cache, no-store, must-revalidate');
    $response->header('Pragma', 'no-cache');
    $response->header('Expires', '0');
    return $response;
}
add_filter('rest_post_dispatch', 'wpfind_disable_rest_cache', 10, 3);

Этот код обеспечивает правильные заголовки, чтобы REST API ответы не кэшировались.

Как отладить AJAX запросы с помощью консоли

Для проверки работы AJAX можно добавить вывод в консоль браузера в JavaScript, например:

jQuery(document).ready(function($) {
    $.ajax({
        url: ajaxurl,
        method: 'POST',
        data: { action: 'wpfind_test_ajax' },
        success: function(response) {
            console.log('AJAX response:', response);
        }
    });
});

И в PHP-файле добавить обработчик:

function wpfind_test_ajax_callback() {
    echo 'AJAX работает и не кэшируется';
    wp_die();
}
add_action('wp_ajax_wpfind_test_ajax', 'wpfind_test_ajax_callback');
add_action('wp_ajax_nopriv_wpfind_test_ajax', 'wpfind_test_ajax_callback');

Если вы видите консольное сообщение и оно актуально при каждом запросе, значит кэширование отключено.

Выводы и рекомендации

Жёсткое кэширование AJAX запросов — частая проблема, которая может сбивать динамическую логику сайта. Чтобы с ней справиться, нужно:

  • Правильно выставлять HTTP заголовки для AJAX ответов с помощью nocache_headers() в WordPress.
  • Проверять и настраивать исключения кэширования на уровне CDN и прокси.
  • Использовать настройки кэш-плагинов для исключения AJAX URL.
  • Тестировать AJAX ответы с помощью инструментов разработчика и консоли.

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

WooCommerce: автоматическое удаление заказов по статусу и срокам
24.04.2026
Как удалить заблокированных пользователей в WordPress: практические методы и код
01.03.2026
Как использовать REST API для создания своего плагина WordPress
14.01.2026
Как удалить неиспользуемые метаданные в WordPress
05.04.2026
Как удалить старые версии постов в WordPress с помощью кода
23.01.2026

Сайт в разработке, скоро здесь будет портал о WordPress.