Если заголовок изменен с момента в 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 / а вот скриншот моего заголовка:

enter image description here( проверить раздел, отмеченный красным). Последнее измененное значение заголовка является ПУСТЫМ.

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

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

Пожалуйста, ребята, помогите мне решить эту проблему. У меня нет ключа к разгадке, и я понятия не имею, как этого добиться.

P.S.: Мой сайт www.isaumya.com

Author: hjpotter92, 2014-12-21

1 answers

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

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

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

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.

 0
Author: iSaumya, 2017-04-13 12:37:31