公告里贴了一段带 onerror 的 img,保存后前台加载就弹窗,控制台报 Refused to execute inline event handler,换成 script 标签反而被过滤了。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,输出时直接 echo 文章内容,没过 wp_kses_post,事件属性和 javascript: 链接都原样保留。编辑权限又开放给了投稿者角色。

「公告富文本过滤」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。报错里带路径的,先去看那个路径在不在、权限对不对。

echo wp_kses_post( get_the_content() );
$allowed = [ 'p' => [], 'a' => [ 'href' => [], 'title' => [] ], 'strong' => [] ];

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,输出前统一过 wp_kses_post,允许的标签列成白名单;投稿者角色禁用 unfiltered_html,保存时再过滤一次;用一条带 onerror 的测试公告验证,确认属性被剥掉。

最后用这个标准收尾,带 onerror 的公告保存后属性消失,前台不再弹出任何对话框。

作者 9823189