如何修改WordPress admin区域的HTTP头

如何修改WordPress admin区域的HTTP头

WordPress提供了wp_headers过滤器钩子和send_headers动作钩子来添加和修改HTTP请求。

对于前端页面,这些是理想的钩子,应该尽可能使用。

然而不幸的是,这两个钩子都不能在WordPress管理区域的所有页面上工作。

经过一些试验,俺找到了一个简单的解决方案来修改管理区域内的任何/所有页面的HTTP头。

wp_headers =不能在管理区域工作

下面的代码可以禁用Chrome XSS:

function shapeSpace_add_xss_header() { 
$headers['X-XSS-Protection'] = '0'; 
return $headers; 
} add_filter('wp_headers', 'shapeSpace_add_xss_header');

但是这在管理区域是行不通的。

它在post、page上确实有效,但在其他地方并没有作用。可能是因为CPT页面使用了WordPress循环,因此触发了wp_headers钩子。

无论如何,wp_headers和send_headers都不能在管理区域的所有页面/请求上工作。幸运的是,有一个解决办法。

添加/修改/删除管理区域的标题

为任何/所有WP生成的页面(包括WordPress管理区域和前端的所有页面)添加或修改标题的最简单方法是使用WP init钩子调用PHP headers()函数。下面是一些基本的例子,展示如何做到这一点。

注意:这些例子只对管理页面的标题进行修改。要修改前端请求的报头,建议使用wp_headers或send_headers。

添加标题

例如,在管理区域和前端(即前端)添加一个XSS头。,我们可以添加以下代码到functions.php或通过插件。

function shapeSpace_add_header() {
	
	if (is_admin()) header('X-XSS-Protection: 0');
	
}
add_action('init', 'shapeSpace_add_header');

这项技术使用WordPress函数is_admin()来检查请求是否针对WP管理区域中的任何页面。

如果是,则通过headers()函数添加XSS头。进一步的条件逻辑可以仅应用于特定的页面。

修改标题

默认情况下,headers()函数替换任何现有的同名header。考虑一下这个例子:

function shapeSpace_modify_header() {
	
	if (is_admin()) header('Example-Header: Value');
	
}
add_action('init', 'shapeSpace_modify_header');

要添加多个具有相同名称的头部,我们可以向headers()函数传递第二个参数,如下所示:

function shapeSpace_add_headers() {
	
	if (is_admin()) {
	
		header('Header-Example: Value 1', false);
		header('Header-Example: Value 2', false);
		header('Header-Example: Value 3', false);
	
	}
	
}
add_action('init', 'shapeSpace_add_headers');

注意,这里我们传递了false作为函数的replace参数的参数。因此,本例将添加三个新标题(不替换任何标题),每个标题都有自己的值。有关更多信息,请查看header()文档。

删除标题

如果你想删除一个头,使用header_remove()函数:

function shapeSpace_remove_header() {
	
	if (is_admin()) header_remove('Header-Example');
	
}
add_action('init', 'shapeSpace_remove_header');

此技术将删除任何名为header – example的头。同样,与前面的示例一样,我们使用is_admin()确保只有管理页面受到影响。

如果你需要修改的是前端页面,请使用WordPress核心钩子、wp_headers和send_headers,而不是上面的PHP headers()技术。

(1)
上一篇 2020年7月21日 下午11:50
下一篇 2020年7月22日 上午12:24

发表评论

登录后才能评论