Если заголовок изменен с момента в WordPress
Я пытаюсь включить 304 If Modified Since HTTP header
на своем сайте WordPress. После долгих поисков в Google я обнаружил сайт, на котором автор сказал поместить следующую строку в самом конце файла wordpress wp-config.php
. Вот строка кода:
header("Last-Modified: " . the_modified_date());
Теперь автор сказал, что это все. Мне не нужно делать ничего другого, чтобы достичь 304 If Modified Since HTTP header
. Но после этого я протестировал HTTP-заголовок с помощью сайта http://httpstatus.io / а вот скриншот моего заголовка:
( проверить раздел, отмеченный красным). Последнее измененное значение заголовка является ПУСТЫМ.
После этого я подумал, что это может быть какая-то проблема с функцией the_modified_date()
, поэтому я также попробовал функцию get_the_modified_date()
. Но все равно никакого результата.
В самом конце я создал небольшую функцию шорткода, чтобы проверить, работают ли эти функции или нет, и повторил ее в коротком коде. Когда я использовал шорткод, я ясно вижу, что функции работают нормально, но по какой-то причине отправляют пустой код на 304 If Modified Since HTTP header
.
Пожалуйста, ребята, помогите мне решить эту проблему. У меня нет ключа к разгадке, и я понятия не имею, как этого добиться.
P.S.: Мой сайт www.isaumya.com
1 answers
the_modified_date()
это тег шаблона, который должен использоваться внутри цикла, поэтому он не подходит для вас.
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 M Y H:i:s", $post_id) );
}
}
}
Почему?
Основной запрос wp не строится на этом момент, ни в фильтре wp_headers
. Итак, is_singular()
возвращает false
, get_queried_object_id()
возвращает NULL
, и нет способа получить измененное время текущего сообщения.
Возможное решение состоит в том, чтобы использовать template_redirect
крючок действия, как предложил Отто в этом вопросе (протестирован и работает):
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 M Y H:i:s", $post_id) );
}
}
}
Пожалуйста, Обратите Внимание
На этот вопрос отвечает @cybmeta в здесь. Я просто делюсь ответом здесь, чтобы, если кто-то ищет ответ здесь он/она найдет это. Вся заслуга принадлежит @cybmeta.