WP_INSERT_POST正在自动修改我的帖子内容

时间:2017-02-09 作者:吉 宁

假设我有一篇帖子内容,上面有这样一个img标签:

<img alt="wikipic" class="aligncenter lazy" width="728" height="546" src="http://www.12reads.cn/wiki/wp-content/themes/baike/images/loading.gif"  data-original="http://news.12reads.cn/wp-content/uploads/2017/02/928_2.jpg" >
wp\\U insert\\U post将自动将其更改为:

<img alt="wikipic" class="aligncenter lazy" width="728" height="546" src="http://www.12reads.cn/wiki/wp-content/themes/baike/images/loading.gif">
原始数据=”http://news.12reads.cn/wp-content/uploads/2017/02/928_2.jpg“零件不见了。

我在wp\\u insert\\u post中使用的参数如下:

$post_info = array(
\'post_status\' => \'draft\', 
\'post_type\' => \'knowhow\', 
\'post_author\' => 1,
\'ping_status\' => get_option( \'default_ping_status\' ), 
\'comment_status\' => get_option( \'default_comment_status\' ),
\'post_pingback\' => get_option( \'default_pingback_flag\' ),
\'post_parent\' => 0,
\'menu_order\' => 0, 
\'to_ping\' => \'\', 
\'pinged\' => \'\', 
\'post_password\' => \'\',
\'guid\' => \'\', 
\'post_content_filtered\' => \'\', 
\'post_excerpt\' => $post_excerpt, 
\'import_id\' => 0,
\'post_content\' => $post_content, 
\'post_title\' => $post_title, 
\'post_category\' => array($post_category_id),
\'post_name\' => trim($post_name),
//\'post_date_gmt\' => get_gmt_from_date(gmdate(\'Y-m-d H:i:s\', $post_time + ( get_option( \'gmt_offset\' ) * 3600 ))),
//\'post_date\' => gmdate(\'Y-m-d H:i:s\', $post_time + ( get_option( \'gmt_offset\' ) * 3600 )), 
\'tags_input\' => array_unique(array_filter(explode(\',\', $tags))),
//\'tags_input\' => $tags,
);
$pid = wp_insert_post($post_info); 
我退房了https://codex.wordpress.org/Writing_Code_in_Your_Posts 还有https://stackoverflow.com/questions/10942170/how-to-prevent-tinymce-editor-within-wordpress-from-changing-the-html-markup 没有运气。

我还确认了以下内容:

这不是一个浏览器的东西。

这三项工作都不起作用。

remove_filter(\'the_content\', \'wpautop\');
remove_filter("the_content", "wptexturize");
remove_filter("the_content", "convert_chars");
3。只有使用wp\\u insert\\u post而不是手动方式添加帖子时,才会发生这种情况。

最后,我知道我可以通过使用js和内容过滤器来实现这一点。

但我只是想弄明白为什么wordpress去掉了自定义img属性。

有人知道为什么吗,我到处找。请。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

的文档wp_insert_post() says:

wp_insert_post() 通过sanitize\\u post()传递数据,后者本身处理所有必要的清理和验证(KSE等)。

如果我们把它挖出来,我们可以找到responsible filter 作为:

add_filter(\'content_save_pre\', \'wp_filter_post_kses\');
kses_init_filters() 作用

当kses初始化为kses_init() 它运行:

kses_remove_filters();

if ( ! current_user_can( \'unfiltered_html\' ) ) {
    kses_init_filters();
}
我们可以看到,只有当前用户没有unfiltered_html 能力。因此,您很可能是以这种方式运行帖子插入。

而不是删除相应的content_save_pre 过滤器,在此后期插入期间,我们应该考虑允许data-original 图像属性。至少这听起来有点安全。

允许默认值<img> 属性are:

\'img\' => array(
    \'alt\'      => true,
    \'align\'    => true,
    \'border\'   => true,
    \'height\'   => true,
    \'hspace\'   => true,
    \'longdesc\' => true,
    \'vspace\'   => true,
    \'src\'      => true,
    \'usemap\'   => true,
    \'width\'    => true,
),
我们可以修改它以支持data-original 属性,通过wp_kses_allowed_html 过滤器:

// Modify allowed HTML through custom filter
add_filter( \'wp_kses_allowed_html\', \'wpse_kses_allowed_html\', 10, 2 );

// Insert
$pid = wp_insert_post($post_info); 

// Remove custom filter
remove_filter( \'wp_kses_allowed_html\', \'wpse_kses_allowed_html\', 10 );
其中,自定义回调为:

function wpse_kses_allowed_html( $allowed, $context )
{
    if( \'post\' !== $context )
        return $allowed;

    $allowed[\'img\'][\'data-original\'] = true;

    return $allowed;
}

相关推荐

是否可以取消对特定帖子类型的POSTS_PER_PAGE限制?

我想知道我是否可以取消特定帖子类型的posts\\u per\\u页面限制。在存档中。php页面我显示不同的帖子类型,对于特定的“出版物”帖子类型,我想显示所有帖子。我如何在不影响传统“post”类型的情况下实现这一点?