我试图在Wordpress中发布由外部方生成的HTML,但我得到的结果与style
属性,如果我以编程方式更新style
属性被删除,但如果我通过编辑器发布相同的HTML,它将保持不变。调试到目前为止,它看起来像kses
过滤器是执行实际剥离的对象
原始HTML:
<div class="container-fluid " style="background-image:url(\'https://localhost/app/uploads/2018/08/315.png\');"></div>
以编程方式提交时,它将变为:
<div class="container-fluid "></div>
提交的代码(修改为更清晰的示例)
$body = <<<EOT
<div class="container-fluid " style="background-image:url(\'https://localhost/app/uploads/2018/08/315.png\');"></div>
EOT;
$new_post = [
\'ID\' => 70,
\'post_title\' => \'Example\',
\'post_content\' => $body,
\'post_type\' => \'post\',
\'post_status\' => \'draft\'
];
$success = wp_update_post($new_post, true);
目的是避免在正常环境中剥离
环境:
除了此代码所在的默认主题之外,没有其他插件
最合适的回答,由SO网友:Tom J Nowell 整理而成
这是因为你要做的是一个安全特性,帖子内容是通过wp_kses_post
去掉危险标签
但是,管理员拥有unfiltered_html
功能,允许他们在内容和标题中放置任意危险的HTML。这就是为什么您可以通过编辑器插入标记。
但这仍然不能解决根本问题,即在帖子内容中包含样式标记,这是一种不好的做法,可能会导致其他问题。
相反,请使用短代码在内容中嵌入任意HTML,例如,实现流体容器短代码:
[fluidcontainer background="url"][/fluidcontainer]
或者使用不需要
style
标签
另一方面,有人可能会建议,有一种极其危险的解决方案,那就是去掉安全功能。这将是极其危险的,并使您面临大量攻击。正如我已经证明的那样,这是不必要的。对任何可能提出建议的人都要非常小心。这样做是鲁莽和不负责任的,在某种程度上是不道德的。在合规性、审计或数据泄露调查期间,它也可以作为技术疏忽的理由