it-swarm.com.de

Festlegen des zuletzt geänderten HTTP-Headers auf der statischen Startseite

Als Antwort auf die hier gestellte Frage finde ich mich und diesen anderen Benutzer, der eine Lösung zum Festlegen eines zuletzt geänderten Headers benötigt, der das Datum und die Uhrzeit des aktuellsten Beitrags enthält. Da wir beide in vielen Themen die Homepage auf eine statische Seite eingestellt haben und dann unseren dynamischen Inhalt in die statischen Dateien codieren, fehlt dieser wichtige Header, um sicherzustellen, dass die zwischengespeicherten Homepages aktualisiert werden, wenn neue Beiträge vorhanden sind.

Wie können wir also einen zuletzt geänderten HTTP-Header auf einer Seite festlegen, die auf den neuesten Beitrag gesetzt wurde?

3
JpaytonWPD

Zuletzt geänderter Header für Besucher auf der Startseite

Es ist nützlich zu sehen, wie der Header Last-Modified den Feeds in der Methode wp::send_header() hinzugefügt wird.

Wenn wir in der Lage sein möchten, is_front_page() zu verwenden, werden die Filter wp_headers oder send_header wahrscheinlich früh angewendet.

Wir könnten stattdessen den Hook template_redirect verwenden, um die Titelseite anzuvisieren, bevor die Header gesendet werden und nachdem is_front_page() bereit ist.

Hier ist ein Beispiel:

/**
 * Set the Last-Modified header for visitors on the front-page 
 * based on when a post was last modified.
 */

add_action( 'template_redirect', function() use ( &$wp )
{
    // Only visitors (not logged in)
    if( is_user_logged_in() )
        return;

    // Target front-page
    if( ! is_front_page() )
        return;

    // Don't add it if there's e.g. 404 error (similar as the error check for feeds)
    if( ! empty( $wp->query_vars['error'] ) )
        return;

    // Don't override the last-modified header if it's already set
    $headers = headers_list();
    if( ! empty( $headers['last-modified'] ) )  
        return;

    // Get last modified post
    $last_modified = mysql2date( 'D, d M Y H:i:s', get_lastpostmodified( 'GMT' ), false );

    // Add last modified header
    if( $last_modified && ! headers_sent() )
        header( "Last-Modified: " . $last_modified . ' GMT' );

}, 1 );

Hier haben wir die PHP Kernfunktionen header() , headers_list() und headers_sent() und die WordPress-Kernfunktion get_lastpostmodified() verwendet.

Der Header Etag könnte auch hier als md5 des letzten Änderungsdatums eingefügt werden.

Wir können es dann von der Kommandozeile aus testen mit z.

# curl --head https://example.tld

oder verwenden Sie einfach den Kurzzeichen-Parameter -I, um nur die HTTP-Header abzurufen.

2
birgire

Ungetestet, aber es sollte funktionieren:

$query = "SELECT MAX(post_modified) AS modified FROM {$wpdb->prefix}posts";
$results = $wpdb->get_results($query);

if (isset($results[0]->modified) {
    header("Last-Modified: ".$results[0]->modified);
}
0
PSD to Final