nocache_headers() WP 2.0.0

Встановлює заголовки, які запобігають кешуванням у всіх браузерах.

nocache_headers() потрібно використовувати до виведення будь-якої інформації на екран.

функція видаляє http заголовок Last-Modifiedабо встановлює порожнє значення. Також прописує інші заголовки пов’язані з кешуванням сторінок браузером, які повертає функція wp_get_nocache_headers() :

Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache

Ця функція використовується по всій адмін-панелі WordPress ( wp-admin/admin-ajax.php ), щоб вимкнути браузерне кешування, виставлене в налаштуваннях сервера nginx або apache (htaccess). Включений барузерний кеш в адмінці заважатиме нормальній роботі WP.

Працює на основі:
wp_get_nocache_headers()

Хуків немає.

Повертає

null. Нічого не вертає.

Використання

nocache_headers();

Приклади

0

#1 Скасуємо кешування у браузері

Скасуємо кешування сторінки перед тим як виконувати будь-який код пов’язаний з сесіями або який виводить інформацію, яка завжди повинна бути свіжою:

// встановлюємо заголовки, що відміняють кеш браузера
nocache_headers();

// виконуємо код
0

#2 Включаємо кешування для вибіркового AJAX запиту

Допустимо, нам потрібно, щоб наш АЯКС запит кешувався в браузері і при повторенні цього запиту протягом зазначеного часу браузер брав дані з кешу і не робив AJAX запит.

Досягти цього можна шляхом встановлення потрібних для кешування заголовків. Зробити це можна безпосередньо або через фільтр nocache_headers .

Варіант: через фільтр nocache_headers

Фільтр потрібно вставити безпосередньо в код PHP і у фільтрі перевірити, що спрацьовує саме наш запит, щоб для інших запитів кешування працювало.

Допустимо нашу AJAX подію називається my_ajax_action , тоді:

add_filter( 'nocache_headers', function( $headers ){

	// Включаємо кешування тільки для нашої події
	if( $_REQUEST['action'] === 'my_ajax_action' ){
		$life_time = HOUR_IN_SECONDS; // Кешуємо на одну годину

		$headers = array(
			'Expires' => gmdate( 'D, d MYH:i:s', time() + $life_time ) .' GMT',
			'Cache-Control' => 'public',
		);
	}

	return $headers;
});

// Функція обробник AJAX запиту
add_action( 'wp_ajax_'.'my_ajax_action', 'my_ajax_action_function');
function my_ajax_action_function(){
	// робимо щось і повертаємо результат для AJAX запиту
	// результат цього запиту кешуватиметься в браузері!
}

Плюс цього варіанта:
Установку кешування можна зробити відразу для кількох подій просто дописавши перевірку назви події.

Варіант: напружена в коді

Безпосередньо у коді найчастіше зручніше, тому що заголовки можна встановити прямо у функції обробника AJAX запиту.

Допустимо нашу AJAX подію називається my_ajax_action , тоді:

// Функція обробник AJAX запиту
add_action( 'wp_ajax_'.'my_ajax_action', 'my_ajax_action_function');
function my_ajax_action_function(){

	// Включаємо кешування в браузері
	$life_time = HOUR_IN_SECONDS; // Кешуємо на одну годину
	header( 'Expires: ' . gmdate('D, d MYH:i:s', time() + $life_time) . 'GMT' );
	header('Cache-control: public');

	// робимо щось та повертаємо результат для AJAX запиту
	// результат цього запиту кешуватиметься в браузері!
}

Плюс цього варіанта:
Менше коду та встановлення кешування можна зробити відразу у функції обробника.

Величезний мінус такого кешування – це те, що програмно не зіб’єш цей кеш. Якщо браузер закеш, то кінець. Припустимося помилився і зробив кеш на 3 роки. Клієнт ніколи здогадається, як очищати кеш. Єдиний спосіб – змінити параметри запиту, щоб запит став інший для браузера.

нотатки

список змін

З версії 2.0.0Введено.

Код nocache_headers() WP 6.0.2

function nocache_headers() {
	if ( headers_sent() ) {
		return;
	}

	$headers = wp_get_nocache_headers();

	unset( $headers['Last-Modified'] );

	header_remove('Last-Modified');

	foreach ( $headers as $name => $field_value ) {
		header("{$name}: {$field_value}");
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *