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