没错,管理部分中的更新不会更改&
到&
而wp\\u update\\u post()函数(可在/wp-includes/post.php 第3772行),但仅当用户不具备unfiltered_html, 让我解释一下我是如何发现这一点的,以及我的建议。
我对此进行了一些跟踪,发现wp\\u update\\u post()在内部调用wp\\u insert\\u post(),如第3820行所示
return wp_insert_post( $postarr, $wp_error );
wp\\u insert\\u post()在第3227行调用sanitize\\u post()
$postarr = sanitize_post( $postarr, \'db\' );
然后在第2176行,此过滤器更改
&
到
&
$value = apply_filters( "{$field_no_prefix}_save_pre", $value );
特别是有一个名为
content_save_pre
或者对我来说
title_save_pre
因为我面临着与标题相同的问题。
现在,转到使用/wp-admin/post.php
您可以在第205行看到实际保存
$post_id = edit_post();
以及
edit_post()
函数可在下找到
/wp-admin/includes/post.php 在线208
function edit_post( $post_data = null ) {
实际更新在第382行完成
$success = wp_update_post( $post_data );
这表明Wordpress在内部使用相同的wp\\u update\\u post()函数。
事实证明,有一个名为“wp\\u filter\\u kses”的过滤器,Wordpress管理员没有使用它,这起到了很大的作用。尽管您可以使用以下方法删除它:
remove_filter(\'content_save_pre\', \'wp_filter_kses\');
或者对我来说
remove_filter(\'title_save_pre\', \'wp_filter_kses\');
或者如@rinogo所述,您可以使用kses\\u remove\\u filters()删除所有kses过滤器。
但是,这些过滤器由/wp-includes/kses.php 检查用户是否具有“unfiltered\\u html”功能后,在线1934
if ( ! current_user_can( \'unfiltered_html\' ) ) {
kses_init_filters();
}
如果
kses_init_filters()
调用,则尝试更新帖子的用户没有足够的信任,并且没有适当的功能。
我建议正确处理身份验证,而不是删除过滤器。