Как сделать постоянный AJAX запрос без кэширования в WordPress

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

Почему AJAX запросы кэшируются и как это влияет на WordPress

По умолчанию браузеры могут кэшировать GET запросы, чтобы ускорить загрузку страниц, а некоторые серверы и CDN тоже применяют кэширование. В WordPress AJAX запросы обычно отправляются на admin-ajax.php с параметром action, и если запрос использует метод GET, есть риск, что ответ будет взят из кэша.

Это особенно критично, если вы обновляете динамические данные, например, статистику, результаты опросов или чаты, где важна своевременность информации. В таких случаях кэширование приводит к тому, что пользователи видят устаревшие данные, и функционал ломается.

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

Как правильно настроить постоянный AJAX запрос без кэширования в WordPress

Основные рекомендации для отключения кэширования AJAX запросов в WordPress:

  • Использовать метод POST вместо GET.
  • Добавлять уникальные параметры к URL, например, временную метку или случайное число.
  • Устанавливать корректные HTTP заголовки, запрещающие кэширование.
  • Обрабатывать запросы через admin-ajax.php с корректной регистрацией обработчиков.

Рассмотрим пример на базе собственного префикса функций wpplugin_ для наглядности.

Регистрация обработчика AJAX в WordPress

add_action('wp_ajax_wpplugin_get_data', 'wpplugin_get_data_callback');
add_action('wp_ajax_nopriv_wpplugin_get_data', 'wpplugin_get_data_callback');

function wpplugin_get_data_callback() {
    // Отключаем кэширование ответа
    nocache_headers();

    // Генерируем данные для ответа
    $data = array(
        'time' => current_time('mysql'),
        'random' => rand(1, 1000),
    );

    wp_send_json_success($data);
}

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

JavaScript часть для постоянного AJAX запроса с отключением кэша

function wpplugin_fetchData() {
    jQuery.ajax({
        url: wpplugin_ajax_object.ajax_url,
        method: 'POST', // POST для отключения кэширования
        data: {
            action: 'wpplugin_get_data',
            nonce: wpplugin_ajax_object.nonce,
            _t: new Date().getTime() // уникальный параметр, предотвращающий кэш
        },
        success: function(response) {
            if(response.success) {
                console.log('Данные:', response.data);
                // обновляем UI
            }
        }
    });
}

// Запуск запроса каждые 5 секунд
setInterval(wpplugin_fetchData, 5000);

Обратите внимание, что мы используем метод POST и добавляем параметр _t с текущим временем, что дополнительно гарантирует уникальность запроса и предотвращает кэширование.

Как добавить безопасность запросов с помощью nonce в WPPlugin

Для защиты AJAX запросов в WordPress принято использовать nonce — одноразовые ключи безопасности. Они предотвращают сторонние атаки и обеспечивают авторизацию вызова.

В PHP-части плагина добавьте генерацию nonce и передачу его в JavaScript:

function wpplugin_enqueue_scripts() {
    wp_enqueue_script('wpplugin-ajax', plugin_dir_url(__FILE__) . 'js/wpplugin-ajax.js', array('jquery'), null, true);

    wp_localize_script('wpplugin-ajax', 'wpplugin_ajax_object', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wpplugin_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wpplugin_enqueue_scripts');

И в обработчике AJAX проверяйте nonce:

function wpplugin_get_data_callback() {
    check_ajax_referer('wpplugin_nonce', 'nonce');
    nocache_headers();

    $data = array(
        'time' => current_time('mysql'),
        'random' => rand(1, 1000),
    );

    wp_send_json_success($data);
}

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

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

  • WP Rocket — популярный плагин для кэширования, который позволяет исключать из кэширования определённые AJAX запросы.
  • Cache Enabler — легковесный плагин с настройками исключений для URL запросов, включая AJAX.
  • Ajax Load More — плагин для бесконечной подгрузки контента с поддержкой различных настроек, включая управление кэшированием.

Настраивая эти плагины, убедитесь, что ваши AJAX запросы не попадают под кэширование, чтобы обеспечить их актуальность.

Выводы и рекомендации по постоянным AJAX запросам в WordPress

Чтобы сделать AJAX запросы в WordPress постоянными и избежать проблем с кэшированием, придерживайтесь следующих правил:

  • Используйте метод POST вместо GET.
  • Добавляйте уникальные параметры к запросам, например, временную метку.
  • Используйте функцию nocache_headers() в PHP для отправки заголовков, запрещающих кэш.
  • Обязательно защищайте запросы с помощью nonce.
  • При использовании плагинов кэширования настраивайте исключения для AJAX URL.

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

Как правильно удалить и отключить плагин в WordPress без ошибок
26.12.2025
Удаление редко используемых полей продукта WooCommerce
26.02.2026
Автоматическое удаление товаров WooCommerce после отмены заказа
30.04.2026
Как добавить автоматическое сохранение данных через AJAX в WordPress плагине
17.02.2026
Как использовать WP-Cron для автоматизации задач в WordPress
09.05.2026