我必须对在WordPress中构建的网站进行一些小的更改,我遇到了一些wp_insert_content函数的问题。此函数对输入进行了清理,将一些HTML标记完全取出(如)并删除其他标记。我想关闭它,在任何地方我都找到了http://pp19dd.com/2010/06/unfiltered-wp_insert_post/的链接,其中包含要添加的解决方案
'filter' => true
到帖子输入数组。
这篇文章是从2010年开始的,并且从我发现2011年增加了额外的一行(http://web.archiveorange.com/archive/v/TDTh42SUwDEc1GFmSrvU)。这一行写着:
unset( $postarr[ 'filter' ] );
并在将输入与默认值合并之后以及在清理之前调用。在我看来,这一行取消了'过滤器'=>上面的真实陈述。实际上,如果线路在那里就会发生消毒,如果线路被取出则会消失。
因此,简单的解决方案是添加'filter'=>如果为true,则删除函数中的额外行。但问题是我不知道该函数在哪里使用,我想知道在WP代码中是不是很聪明。 WP的更新无论如何都会恢复它。那么......还有其他方法可以阻止这个函数清理输入吗?
答案 0 :(得分:6)
有些其他插件可能正在尝试清理内容,在这种情况下,删除所有过滤器是唯一的选择,请尝试以下操作:
remove_all_filters("content_save_pre");
$post_id = wp_insert_post($post);
其他可能的过滤标签是:
pre_content
pre_post_content
content_pre
如果它不起作用,也可以逐个尝试。答案 1 :(得分:0)
我也在使用内容正文中的s导入帖子。 我整个上午都在寻找解决方案,关于这个话题进行了一些讨论。到目前为止
kses_remove_filters();
对我没有任何作用,也没有评论这两行:
unset( $postarr[ 'filter' ] ); // overrides 'filter' => true since 3.0 i guess
$postarr = sanitize_post($postarr, 'db');
在post.php中的wp_insert_post()中(默认为第2704行)。
第2874行还有另一个有趣的内容:
$data = apply_filters('wp_insert_post_data', $data, $postarr);
这似乎可能是我们遇到麻烦的根源,但我自己太多了解这个问题。
真的,真的,迫切需要帮助!哦,我无法评论,抱歉垃圾邮件行动。 我想保持这个线程开放并找到解决方案。
我认为它在我发布之前有效,但我导入的内容已经删除了HTML标签 最简单的解决方法是在插入帖子后手动覆盖内容,但这仅适用于隔离环境或导入
$wpdb->update($wpdb->posts, array("post_content"=>$content->content), array("ID"=>$postid), array("%s"), array("%d"));
总之,
remove_all_filters("content_save_pre");
做了伎俩!