我正在尝试在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
答案 0 :(得分:0)
the_modified_date()
是一个必须在循环中使用的模板标记,这就是为什么它不适合你。
WordPress提供了一个操作和过滤器钩子来包含或修改HTTP头:
send_headers
action wp_headers
过滤器(我在代码中找不到引用)但它并没有为此目的而工作。例如,下一个代码不起作用:
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()
会返回false
,get_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) );
}
}
}
请注意
问题由@cybmeta here回答。我只是在这里分享答案,这样如果有人在这里寻找答案,他/她就会找到答案。所有积分均归@cybmeta。