用于修改http标头的WP函数/过滤器?


17

添加/修改HTTP标头时是否有专用的WP函数,操作或过滤器?

现在,我只是将PHP header()调用挂接到WP'init'钩中,如下所示:

add_action('init', 'add_header_xua');
function add_header_xua(){
    if(!is_admin()){
        header('X-UA-Compatible: IE=edge,chrome=1');    
    }
}

但这是正确的方法吗?

Answers:


9

初始化操作是执行此操作的错误位置。更好的位置是template_redirect,这样您就只会影响网站的前端视图,而不会影响管理区域。


关于钩子的好处,但除此之外,是以正确的方式调用“ raw” header()函数(使用正确的钩子)还是应该使用wp包装器?直接调用标头仅允许添加标头,而不修改标头,就像可以使用过滤器一样(例如,当您要操纵主体类时)
mikkelbreum 2011年

1
header()是唯一的方法。但是,它确实具有第二个参数,该参数可让您替换现有的标头而不是添加到它们中。参见php.net/manual/en/function.header.php
奥托

14

这是我使用的代码,基于原始问题和Dominic P的答案...

/*
 * Modify HTTP header
 */
function add_header_xua($headers) {

    // var_dump($headers); #=> if you want to see the current headers...  

    if (!is_admin()) {
        $headers['X-UA-Compatible'] = 'IE=edge,chrome=1';    
    }

    return $headers;     
}
add_filter('wp_headers', 'add_header_xua');

将代码添加到functions.php文件后,可以通过在http://web-sniffer.net/上运行测试以确保HTTP标头确实已更改,来检查其是否正常。


11

我知道已经有一段时间了,但是如果有人偶然发现,我发现了一个专门用于修改HTTP标头的WordPress钩子。钩子wp_headerswp类中被调用

传递的第一个参数是标头名称为键的标头数组。第二个参数是对wp类对象的引用。


还有另一个钩子:send_headers。在挂钩列表中没有看到任何“ wp_headers” 。
pixeline

嗯,这很有趣。您可以在此处签出wp_headers过滤器
Dominic P

我认为(但不确定)有“内部”钩子(例如wp_headers)和“公共”钩子(例如“ send_headers”)。“内部”挂钩在将来的发行版中更容易更改。“公共”挂钩被认为更“稳定”。但是我在这里可能是错的,我找不到任何资料来支持我从对钩子所做的各种研究中得到的这种感觉。
pixeline 2014年

这是很有可能的,但是在这种情况下,看起来两个钩子只是执行不同的功能。 send_headers是在发送标头后触发的操作,是对发送wp_headers标头之前应用的标头的过滤器。
Dominic P

好...如果只有send_headers一个抄本页面这一事实说明了要使用的页面...
drzaus

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.