si se modificó desde el encabezado HTTP

2

Estoy intentando habilitar 304 If Modified Since HTTP header en mi sitio de WordPress. Después de hacer muchas búsquedas en Google, descubrí un sitio donde el autor dijo que pusiera la siguiente línea al final del archivo wordpress wp-config.php . Aquí está la línea de código:

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

Ahora el autor dijo que esto era todo. No tengo que hacer nada más para lograr 304 If Modified Since HTTP header . Pero después de hacer esto, lo probé con el encabezado HTTP usando el sitio

  

enlace

y aquí está la captura de pantalla de mi encabezado:

Compruebalasecciónmarcadaenrojo.ElúltimovalordeencabezadomodificadoesENBLANCO.

Despuésdeesopenséqueestopodríaserunproblemaconlafunciónthe_modified_date(),asíquetambiénheprobadolafunciónget_the_modified_date().Peroaúnnohayresultado.

Alfinal,hecreadounapequeñafuncióndecódigoabreviadoparaprobarsiestasfuncionesestánfuncionandoonoysehizoecodentrodelcódigoabreviado.Cuandoutilicéelcódigoabreviado,puedoverclaramentequelasfuncionesfuncionanbien,peroporalgunarazónseenvíaenblancoal304IfModifiedSinceHTTPheader.

Misitioes aquí

¿Alguna sugerencia sobre cómo resolver esto?

    
pregunta iSaumya 22.12.2014 - 09:59

3 respuestas

3

the_modified_date() es una etiqueta de plantilla que debe usarse dentro del bucle, es por eso que no está funcionando para usted.

WordPress proporciona un gancho de filtro y acción para incluir o modificar encabezados HTTP:

Pero no funciona para este propósito. Por ejemplo, el siguiente código no funciona:

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

¿Por qué ?

La consulta principal de wp no se genera en este momento, ni en el filtro wp_headers . Entonces, is_singular() devuelve false , get_queried_object_id() devuelve NULL y no hay manera de obtener la hora modificada de la publicación actual.

Una posible solución es usar template_redirect gancho de acción, como lo sugiere Otto en esta pregunta (probado y en funcionamiento):

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

}
    
respondido por el cybmeta 22.12.2014 - 10:34
2

Probé el código de cybmeta pero la fecha no se estableció correctamente. No estoy completamente seguro de la razón, pero después de investigar encontré el complemento Add Headers , que ahora está en desuso pero fue una buena opción. Fuente de código útil. En ese complemento, el autor establece la fecha del encabezado de Última modificación de una manera diferente y la utiliza para modificar el código que funcionó para mí. Esto es lo que terminé con:

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 M Y H: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 );
        }
    }
}
    
respondido por el Mojamba 26.09.2017 - 08:41
1

Mi solución para Última modificación y correcta 304 No modificada

Inside 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 M Y H:i:s \G\M\T", $post_id);
            $LastModified_unix = gmdate("D, d M Y H: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 M Y H:i:s", $post_id) );
                }
        }

    }
    
respondido por el Travis Cat 21.07.2016 - 22:53

Lea otras preguntas en las etiquetas