Функция nocache_headers()
в WordPress используется для установки HTTP-заголовков, которые предотвращают кэширование страниц браузером. Эта функция важна для того, чтобы обеспечить актуальность контента и избежать потенциальных проблем с устаревшими данными.
nocache_headers();
Функция устанавливает несколько заголовков, которые поддерживаются разными браузерами для предотвращения кэширования. Среди них:
- Expires: устанавливается на прошедшую дату, чтобы указывать, что кэш недействителен.
- Cache-Control: задает правила кэширования.
- Pragma: отключает кэширование.
Эти заголовки гарантируют, что данные на странице будут всегда актуальными и не будут загружаться из кэша браузера.
Когда использовать?
Функция nocache_headers()
полезна в админ-панели (wp-admin
) и в AJAX-запросах, где важно предотвратить кэширование, установленное сервером или браузером. Она также может быть вызвана в начале функции, которая должна выводить динамическое содержимое.
Пример 1: Отключение кэширования для всей страницы
Этот код в файле functions.php
полностью отключит кэширование для страниц WordPress, добавив требуемые заголовки:
<?php
// Отключаем кэширование для текущей страницы
nocache_headers();
Пример 2: Установка кэширования для конкретного AJAX-запроса
Допустим, нам нужно включить кэширование для определенного AJAX-запроса, чтобы при его повторном вызове данные загружались из кэша. В этом случае можно использовать фильтр nocache_headers
и проверить, что запрос соответствует нужному событию.
<?php
add_filter( 'nocache_headers', function( $headers ) {
// Проверяем, что это наш AJAX-запрос
if ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'my_custom_ajax_action' ) {
$cache_life = DAY_IN_SECONDS; // Кэшируем на один день
$headers = array(
'Expires' => gmdate( 'D, d M Y H:i:s', time() + $cache_life ) . ' GMT',
'Cache-Control' => 'public, max-age=' . $cache_life,
);
}
return $headers;
});
// Обработчик AJAX-запроса
add_action( 'wp_ajax_my_custom_ajax_action', 'my_custom_ajax_action_function' );
function my_custom_ajax_action_function() {
// Логика обработки запроса
}
Пример 3: Прямое добавление заголовков в обработчик AJAX-запроса
В этом примере заголовки для кэширования устанавливаются непосредственно в функции обработки AJAX-запроса. Такой способ удобен, так как заголовки устанавливаются только для конкретного запроса.
<?php
add_action( 'wp_ajax_my_other_ajax_action', 'my_other_ajax_action_function' );
function my_other_ajax_action_function() {
$cache_duration = HOUR_IN_SECONDS; // Кэшируем на один час
header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + $cache_duration ) . ' GMT' );
header( 'Cache-Control: public, max-age=' . $cache_duration );
// Логика обработки запроса
}
Примечание: прямое добавление заголовков кэширования может создать проблемы при изменении данных, так как старые данные будут храниться в кэше до истечения заданного времени. Поэтому важно использовать такой подход только в случаях, когда данные редко обновляются.
Пример 4: Отключение кэширования для страниц сессий
Если на странице отображаются данные, которые должны быть актуальными при каждом просмотре (например, динамический контент или информация о сессиях), можно вызвать nocache_headers()
перед выполнением основной логики:
<?php
// Отключаем кэширование перед началом выполнения кода, связанного с сессией
nocache_headers();
// Основной код для отображения страницы
Пример 5: Настройка заголовков для уникальных правил кэширования
С помощью фильтра nocache_headers
можно задать собственные значения заголовков, чтобы соответствовать уникальным требованиям кэширования. В примере ниже заголовок Cache-Control
изменен на no-store
, что гарантирует, что данные не будут храниться нигде:
<?php
add_filter( 'nocache_headers', function( $headers ) {
$headers['Cache-Control'] = 'no-store, no-cache, must-revalidate';
return $headers;
});
Заключение
Функция nocache_headers()
помогает управлять кэшированием страниц и запросов в WordPress. Это особенно полезно для обеспечения актуальности динамических данных на сайте.