web-dev-qa-db-ja.com

静的ホームページにLast Modified HTTPヘッダーを設定する

ここで質問された質問に答えて 私は自分自身とこの他のユーザーが最も評判の良い投稿の日時を含む最後に修正されたヘッダーを設定するための解決策を必要としているのを見つけます。私たちは多くのテーマでホームページを静的ページに設定してから動的コンテンツを静的ファイルにコーディングしているので、新しい投稿があるときにキャッシュされたホームページが確実に更新されるようにするための重要なヘッダがありません。

それでは、どのようにしてそれが最新のPostに設定したページ上に最後に修正されたHTTPヘッダを設定することができるでしょうか?

3
JpaytonWPD

フロントページの訪問者のLast-Modifiedヘッダー

wp::send_header() メソッドで、 Last-Modified ヘッダーがフィードにどのように追加されているかを確認すると便利です。

is_front_page()を使用できるようにしたい場合は、フィルタwp_headersまたはsend_headerがおそらく早く適用されます。

代わりに、ヘッダが送信される前とis_front_page()の準備ができた後に、template_redirectフックを使ってフロントページをターゲットにすることができます。

これが例です:

/**
 * 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 );

ここではコアPHP functions header()headers_list() 、および headers_sent() とWordPressコア関数 get_lastpostmodified() を使いました。

Etag ヘッダーも、最後の変更日の md5 としてここに追加できます。

その後、コマンドラインから次のようにテストします。

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

あるいは、HTTPヘッダーのみを取得するために、省略形のパラメータ-Iを使用するだけです。

2
birgire

テストされていませんが、 はず work:

$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