我在前端展示了一些示例HTML/PHP代码(语法突出显示)。这些条目显示为FAQ自定义帖子,并有一个插件(CMS树页面)来改变菜单顺序,在菜单上显示这些内容。每当我更改顺序时,它都会调用wp_update_post
, 正在更新ID
, menu_order
, post_parent
, post_type
. 对于调试,我输出post_content
更新前和更新后的产权都会发生可怕的变化。
之前(正确):
[html light="true"]</body>[/html]
之后(凌乱):
[html light="true"]&lt;/body&gt;[/html]
如果我再这样做几次,它就会变成活地狱:
[html light="true"]&amp;amp;lt;/body&amp;amp;gt;[/html]
看起来很像
htmlspecialchars()
具有
ENT_NOQUOTES
已经在上面投下了。。。
请注意,这些来自“源代码”视图,而不是前端。浏览器正确处理“Before”状态,并将其呈现为
</body>
我怎样才能防止它变得一团糟?
SO网友:Firsh - justifiedgrid.com
是的https://wordpress.org/plugins/syntaxhighlighter/ 插件故障。其中有一些功能与此相关,即encode_shortcode_contents_slashed_noquickedit
, encode_shortcode_contents_callback
.
现在我将其替换为https://wordpress.org/plugins/crayon-syntax-highlighter/ 但当我确认这是另一个插件的错误时,我已经写了一个解决方案。
function wpse190396_insert_post_data($data, $postarr){
if($postarr[\'filter\'] == \'db\'
&& ($data[\'post_type\'] == \'fix\' || $data[\'post_type\'] == \'faq\')
&& (strpos($data[\'post_content\'],\'&lt;\') !== false
|| strpos($data[\'post_content\'],\'&nbsp;\') !== false
|| strpos($data[\'post_content\'],\'&gt;\') !== false
)){
$data[\'post_content\'] = htmlspecialchars_decode($data[\'post_content\']);
}
return $data;
}
add_action( \'wp_insert_post_data\', \'wpse190396_insert_post_data\', 10, 2 );