最近项目中在Wordpress后台编辑器中添加了一种新的编辑器区块用于保存图片的链接,保存到数据库中的内容大概长这个样子:
<!-- wp:gamux/slide-url -->
<slide>@httpLink</slide>
<!-- /wp:gamux/slide-url -->
但是WP在将文章内容写入到数据库前会执行一系列的安全检查,过滤掉不合法的字符和HTML标签,于是实际写入到数据库的内容会变成:
<!-- wp:gamux/slide-url -->
@httpLink
<!-- /wp:gamux/slide-url -->
查找之后发现是wp_kses_allowed_html() 这个函数将我们自定义的<slide> 标签过滤掉了,于是添加以下钩子,将"slide"标签加入允许的标签中:
// 将<slide></slide>标签添加到允许使用的HTML标签中,防止被过滤
function add_my_allowed_tag($allowedtags) {
array_push($allowedtags, [
'slide' => array(
'src' => true //允许标签中存在src属性
)
]);
return $allowedtags;
}
add_filter('wp_kses_allowed_html', 'add_my_allowed_tag');
可以查看全部允许的标签:
var_dump(wp_kses_allowed_html());
参考
wp_kses() | Function | WordPress Developer Resources
wp_kses_allowed_html() | Function | WordPress Developer Resources