在静态主页上设置上次修改的HTTP标头

时间:2017-02-20 作者:JpaytonWPD

针对question asked here 我发现自己和另一个用户需要一个解决方案来设置上次修改的标题,其中包含最新帖子的日期和时间。由于我们在许多主题中都将主页设置为静态页面,然后将动态内容编码到静态文件中,因此我们缺少了确保缓存的主页在有新帖子时更新的重要标题。

那么,我们如何在设置为最新帖子的页面上设置上次修改的HTTP头呢?

3 个回复
最合适的回答,由SO网友:birgire 整理而成

首页上的访客上次修改的标题查看如何将上次修改的标题添加到提要中非常有用wp::send_header() 方法

如果我们想使用is_front_page(), 然后过滤器wp_headerssend_header 可能适用于早期。

我们可以使用template_redirect 在发送标题之前和之后,钩住目标首页is_front_page() 已准备就绪。

下面是一个示例:

/**
 * 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函数header(), headers_list()headers_sent() 以及WordPress的核心功能get_lastpostmodified()

此处也可以添加Etag标题,作为上次修改日期的md5。

然后,我们可以从命令行对其进行测试,例如:

# curl --head https://example.tld
或者只使用速记参数-I 仅获取HTTP标头。

SO网友:Phoenix Online

未经测试,但应能正常工作:

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

SO网友:header-works

add_action(\'template_redirect\', \'theme_add_last_modified_header\');

function theme_add_last_modified_header($headers) {
    global $post;
    if(isset($post) && isset($post->post_modified)){
        $post_mod_date=date("D, d M Y H:i:s",strtotime($post->post_modified));
        header(\'Last-Modified: \'.$post_mod_date.\' GMT\');
     }
}
这在帖子和页面上对我有用:)

相关推荐

多站点:将主站点的URL更改为HTTPS

我已经在新安装的WordPress上设置了多站点。然后我创建了一些其他网站,所以,最后,我有了这样的东西http://example.comhttp://site1.example.comhttp://site2.example.comhttp://site3.example.com然后我安装了SSL数字证书,因此我更改了网站的URL以匹配HTTPS方案:http://example.com更改我转到的方案Sites > All Sites, 然后单击每个站点,在选项卡“信息”(第一个)中,我只需更