【问题标题】:If Modified Since Header in WordPress如果从 WordPress 中的标题开始修改
【发布时间】:2014-12-21 12:18:40
【问题描述】:

我正在尝试在我的 WordPress 网站中启用 304 If Modified Since HTTP header。在做了很多谷歌搜索之后,我找到了一个网站,作者说将以下行放在 wordpress wp-config.php 文件的最后。这是代码行:

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

现在作者说就是这样。我不需要做任何其他事情来实现304 If Modified Since HTTP header。但是在这样做之后,我使用站点http://httpstatus.io/ 通过 HTTP 标头进行了测试,这是我的标头的屏幕截图:

(检查红色标记部分)。最后修改的标头值为 BLANK。

之后我认为这可能是the_modified_date() 函数的一些问题,所以我也尝试了get_the_modified_date() 函数。但还是没有结果。

最后,我创建了一个小的短代码函数来测试这些函数是否正常工作,并在短代码中回显它。当我使用简码时,我可以清楚地看到功能运行良好,但由于某种原因将空白发送到 304 If Modified Since HTTP header

请大家帮我解决这个问题。我不知道如何实现这一目标。

P.S.:我的网站是www.isaumya.com

【问题讨论】:

  • 有什么帮助吗?请看看这个并帮助我,以及许多其他 wordpress 用户。
  • 查看你的日志文件,谷歌多久发送一次 if mod 304 请求。
  • 我不明白你的问题。谷歌不发送如果修改,它会从网页中读取最后修改的标题。
  • 是的,我知道谷歌会加载整个页面,但我不确定 googlebot 是否会因为标题激活网站而被修改。大多数站点不使用此功能,因此,作为 googlebot,他们必须获取整个站点。除此之外,我提到了我的谷歌网站管理员指南。
  • 如您所见,此主题是为WordPress 站点制作的,其中没有HTML Static Content,用户可以随时更改任何内容。

标签: php wordpress .htaccess seo http-headers


【解决方案1】:

the_modified_date() 是必须在循环内使用的模板标签,这就是它不适合你的原因。

WordPress 提供了一个操作和过滤钩子来包含或修改 HTTP 标头:

但它不适用于此目的。例如,下一个代码不起作用:

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

为什么?

此时未构建主要的 wp 查询,wp_headers 过滤器中也没有。所以is_singular()返回falseget_queried_object_id()返回NULL,无法获取当前帖子的修改时间。

一个可行的解决方案是使用 template_redirect 动作钩子,正如 Otto 在 this question 中所建议的那样(经过测试和工作):

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

}

请注意

@cybmetahere 回答了这个问题。我只是在这里分享答案,以便如果有人在这里寻找答案,他/她会找到它。所有功劳归@cybmeta

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2018-04-21
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多