add_filter("wp_kses_allowed_html", function ($tags, $context) {
    if ($context === "post" && current_user_can("unfiltered_html")) { $tags["style"] = []; }
    return $tags;
}, 10, 2);

在自定义 HTML 区块里放了 6 行内联样式,保存后刷新,style 标签和 script 全没了,只剩几个 div。切到代码编辑模式也看不到。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,保存时内容要过一遍 wp_kses_post,允许的标签里没有 style 和 script,写多少都会被剥掉。多站点和低权限角色还会再收一层,管理员保存成功也不代表前台一定保留。

「HTML 区块被过滤」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。改完隔一天再看一次,当场正常不代表能稳住。

测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

处理上按这个顺序:样式改写到主题样式表或 theme.json 里 别塞进 HTML 区块;确实需要内联样式就扩展允许标签 同时校验权限;脚本单独入队 不要依赖区块内容输出。

改完只确认一件事:保存后刷新,style 标签和里面 6 行规则都还在,前台样式按预期生效。

作者 9823189