Intereting Posts
Новое меню «Admin Menu» WordPress 3.1 не отображается на моем сайте или в панели инструментов Боковая панель не появляется в нижнем колонтитуле, но она появляется везде! Как добавить фильтр для вывода всех виджета Почему, когда я пытаюсь получить доступ к этому старому сайту WordPress, открывается страница установки? Настройки пользовательского блога Скрытый пользовательский тип сообщения Добавить специальный мета-ящик в пользовательский тип сообщения Один обмен для нескольких типов сообщений Безопасность пользовательских функций WordPress добавление пользовательского скрипта в файл функций Отображать продукты с определенным текстом внутри Тема с неправильным обновлением Как разрешить «Авторам» редактировать свои ссылки на био и социальные сети? Проблема с удалением почтовых тегов программным способом Карусель каретки для почты

Если изменено с заголовка HTTP

Я пытаюсь включить 304 If Modified Since HTTP header на моем сайте WordPress. После того, как я сделал много работы в Google, я обнаружил сайт, на котором автор сказал, чтобы поставить следующую строку в самом конце файла wp-config.php wordpress. Вот строка кода:

 header("Last-Modified: " . the_modified_date()); 

Теперь автор сказал, что все. Я не должен делать ничего другого, чтобы достичь 304 If Modified Since HTTP header . Но после этого я тестировал HTTP-заголовок, используя сайт

http://httpstatus.io/

и вот скриншот моего заголовка:

введите описание изображения здесь

Проверьте красную отмеченную секцию. Последнее измененное значение заголовка BLANK.

После этого я подумал, что это может быть проблемой с the_modified_date() поэтому я также попробовал get_the_modified_date() . Но результата нет.

В самом конце я создал небольшую функцию короткого кода, чтобы проверить, работают ли эти функции или нет, и повторил ее внутри короткого кода. Когда я использовал короткий код, я ясно вижу, что функции работают нормально, но по какой-то причине отправляют пустую 304 If Modified Since HTTP header .

Мой сайт здесь

Любые предложения о том, как это решить?

Solutions Collecting From Web of "Если изменено с заголовка HTTP"

the_modified_date() – это тег шаблона, который должен использоваться внутри цикла, поэтому для вас это не wokring.

WordPress обеспечивает действие и фильтр для включения или изменения HTTP-заголовков:

  • Действие send_headers
  • Фильтр wp_headers

Но для этой цели это не сработает. Например, следующий код не работает:

 add_action( 'send_headers', 'cyb_add_last_modified_header' ); function cyb_add_last_modified_header() { //Check if we are in a single post of any type (archive pages has not modified date) if( is_singular() ) { $post_id = get_queried_object_id(); if( $post_id ) { header("Last-Modified: " . get_the_modified_time("D, d MYH:i:s", $post_id) ); } } } 

Зачем?

Основной запрос wp не wp_headers в данный момент, ни в фильтре wp_headers . Итак, is_singular() возвращает false , get_queried_object_id() возвращает NULL и нет способа получить измененное время текущего сообщения.

Положительным решением является использование template_redirect action hook, как предложил Отто в этом вопросе (проверенный и работающий):

 add_action('template_redirect', 'cyb_add_last_modified_header'); function cyb_add_last_modified_header($headers) { //Check if we are in a single post of any type (archive pages has not modified date) if( is_singular() ) { $post_id = get_queried_object_id(); if( $post_id ) { header("Last-Modified: " . get_the_modified_time("D, d MYH:i:s", $post_id) ); } } } 

Я пробовал код из cybmeta, но дата не была установлена ​​правильно. Я не совсем уверен в причине, но после расследования я нашел плагин Add Headers, который теперь устарел, но был хорошим источником полезного кода. В этом плагине автор устанавливает дату последнего изменения даты другим способом и использует это для изменения кода, который работал для меня. Вот что я закончил:

 add_action('template_redirect', 'cyb_add_last_modified_header'); function cyb_add_last_modified_header($headers) { //Check if we are in a single post of any type (archive pages has not modified date) if( is_singular() ) { $post_id = get_queried_object_id(); if( $post_id ) { $post_mtime = get_the_modified_time("D, d MYH:i:s", $post_id); $post_mtime_unix = strtotime( $post_mtime ); $header_last_modified_value = str_replace( '+0000', 'GMT', gmdate('r', $post_mtime_unix) ); header("Last-Modified: " . $header_last_modified_value ); } } } 

Мое решение для Last-Modified и правильно 304 Не модифицировано

Внутри functions.php

 add_action('template_redirect', 'last_mod_header'); function last_mod_header($headers) { if( is_singular() ) { $post_id = get_queried_object_id(); $LastModified = gmdate("D, d MYH:i:s \G\M\T", $post_id); $LastModified_unix = gmdate("D, d MYH:i:s \G\M\T", $post_id); $IfModifiedSince = false; if( $post_id ) { 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: " . get_the_modified_time("D, d MYH:i:s", $post_id) ); } } }