$allowed = ['iframe' => ['src' => true, 'width' => true, 'height' => true, 'allowfullscreen' => true]];
update_post_meta($id, 'video_embed', wp_kses($_POST['video_embed'], $allowed));

在“视频嵌入”字段里粘一段 iframe,保存后重新打开只剩空白,数据库里 meta_value 是空串,普通文本字段正常。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,保存时套了 wp_kses_post,iframe 不在允许标签里被整段剥掉。另有一处用了 sanitize_text_field,所有标签都会消失,字段本身允许 HTML 时不该走这层过滤。

围绕「自定义字段 HTML 被过滤」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。改完隔一天再看一次,当场正常不代表能稳住。

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

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

处理上按这个顺序:确认该字段是否需要保留 HTML;换成 wp_kses 加自定义白名单;只对管理员放开 unfiltered_html。

改完只确认一件事:保存后 iframe 原样保留,普通用户提交同样的内容仍会被过滤。

作者 9823189