WordPress 原生的评论模块内容,支持使用 HTML 标签来增强评论内容的格式和效果。但是这肯定会带来一些安全隐患,特别是评论这种随便一个浏览者都可以提交数据的地方,容易产生跨站攻击(XSS),所以 WordPress 系统严格的限制了评论模块可以使用的 HTML 标签。默认的情况下,只支持:a、abbr、acronym、b、blockquote、cite、code、del、em、i、q、strike、strong 这几个标签和对应的相关属性。
这些标签肯定是远远不够用的,如果是技术博客,评论往往需要包含代码,那么可能就需要添加 pre 标签的支持,如果想要评论中可以引用图片,那么需要 img 标签的支持。本文就是来讲解如何在评论模块中增加更多 HTML 标签的支持。
WordPress 允许的标签和属性
WordPress 出于安全考虑,严格的限制了文章和评论等可编辑内容支持的 HTML 标签类型和标签的属性。具体的内容可以看:wp-includes/kses.php 这个文件,里面有两个全局数组变量 allowedposttags 和 allowedtags ,这两个数组变量就包含了允许的 HTML 标签,每个标签的键值又是一个数组,记录了这个标签常用的属性。例如:
代码语言:javascript复制$allowedtags = array(
'a' => array(
'href' => true,
'title' => true,
));
上面这个数组的含义就是支持 a 标签以及对应的 href、title 属性。
让 WordPress 评论支持更多标签的方法
思路很简单,先按照上面的格式,声明一个标签信息数组,然后 hook 勾到 WordPress 上面。例如想要增加 pre 标签的支持,先声明下面数组:
代码语言:javascript复制function allowedtags_pre() {
global $allowedtags;
$allowedtags['pre'] = array('class'=>true,);
}
这个函数的意思就是:先声明一下 $allowedtags 这个全局变量,然后下面就可以为这个全局变量增加一个新键值 pre,由于 pre 标签可能需要增加 class 属性,所以我们同时增加它的 pre 标签支持。下面 hook 一下,add_action 到 comment_post 就可以把刚刚修改的内容关联进 WordPress 了:
代码语言:javascript复制add_action('comment_post', 'allowedtags_pre');
这样,就相当于为 $allowedtags 新增加了 pre,把这两段代码放进主题目录下的 functions.php 文件中或者写成插件,然后就可以实现了。