I am trying to enable 304 If Modified Since HTTP header in my WordPress site. After doing lot of Googling I find out a site where the author said to put the following line at the very end of wordpress wp-config.php file. Here is the line of code:

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

Now the author said that this was it. I dont have to do anything else to achieve 304 If Modified Since HTTP header. But after doing this I tested by HTTP header using the site

http://httpstatus.io/

and here is the screenshot of my header:

enter image description here

Check the red marked section. The last modified header value is BLANK.

After that I thought this might be some issue with the_modified_date() function so I’ve also tried get_the_modified_date() function. But still no result.

At the very end, I’ve created a small shortcode function to test if these functions are working or not and echoed it inside the short code. When I used the shortcode I can clearly see that the functions are working fine but for some reason sending blank to the 304 If Modified Since HTTP header.

My site is here

Any suggestions on how to solve this?

3 Answers
3

the_modified_date() is a template tag that must used inside the loop, that is why it is not wokring for you.

WordPress provide a action and filter hook to include or modify HTTP headers:

  • send_headers action
  • wp_headers filter

But it doesn’t work for this purpose. For example, the next code is not working:

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) );
        }
    }
}

Why?

The main wp query is not build at this moment, neither in wp_headers filter. So, is_singular() returns false, get_queried_object_id() returns NULL and there is no way to get the modified time of the current post.

A posible solution is to use template_redirect action hook, as suggested by Otto in this question (tested and working):

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) );
        }
    }

}

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *