smidl
@smidl
WordPress-разработчик

Почему не отдается заголовок Last-Modified?

Нужно добавить указанный в титле заголовок, но не получается. Вот код, который использую:

function add_header_xua($headers) {

	if( is_singular() ) {
        $post_id = get_queried_object_id();
        if( $post_id ) {
            $headers['Last-Modified'] = get_the_modified_time("D, d M Y H:i:s", $post_id);    // не появляется в заголовках
            $headers['Last-Modified2'] = get_the_modified_time("D, d M Y H:i:s", $post_id);  // появляется в заголовках  
        }
    }

    return $headers;     
}
add_filter('wp_headers', 'add_header_xua');
  • Вопрос задан
  • 292 просмотра
Решения вопроса 1
smidl
@smidl Автор вопроса
WordPress-разработчик
Разобрался и настроил.

1) Поменял версию PHP с 5.4 на 5.6

2) Изменил filter wp_headersна action template_redirect. Поскольку на момент срабатывания wp_headers - переменные типа $post еще не инициализированы, а значит, все проверки типа поста, получение его ID и т.д. - невозможны

function lastmode_headers() {

	if(is_singular()) {
		global $post;
		$LastModified = get_the_modified_time("D, d M Y H:i:s", $post->id);

		$IfModifiedSince = false;
		if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))
			$IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));  
		if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
			$IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
		if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) {
			header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
			exit;
		}
		header('Last-Modified: '. $LastModified);  
	}
}
add_action('template_redirect', 'lastmode_headers');
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы