它看起来像一个bug,但添加了在中修改的post\\uwp_insert_post 不工作:
$wp_test = array(
\'post_title\' => \'test\',
\'post_content\' => \'test\',
\'post_status\' => \'publish\',
\'post_type\' => \'test\',
\'post_author\' => 1,
\'post_date\' => \'2015-01-22 22:00:12\',
\'post_date_gmt\' => \'2015-01-22 22:00:12\',
\'post_modified\' => \'2016-04-18 12:12:12\',
\'post_modified_gmt\' => \'2016-04-18 12:12:12\',
\'comment_status\' => \'closed\'
);
$wp_id = wp_insert_post( $wp_test );
post\\u修改日期不起作用,并获得与post\\u日期相同的值,而不是所希望的“2016-04-18 12:12:12”。这是虫子吗?我正在使用wp 4.5(二十一六主题)。我使用以下代码修复了它,但我认为它可能更实用。。。
$wp_test = array(
\'post_title\' => \'test\',
\'post_content\' => \'test\',
\'post_status\' => \'publish\',
\'post_type\' => \'test\',
\'post_author\' => 1,
\'post_date\' => \'2015-01-22 22:00:12\',
\'post_date_gmt\' => \'2015-01-22 22:00:12\',
\'comment_status\' => \'closed\'
);
$wp_id = wp_insert_post( $wp_test );
// ugly fix
$wpdb->query( "UPDATE $wpdb->posts SET post_modified = \'2016-04-18 12:12:12\',post_modified_gmt = \'2016-04-18 12:12:12\' WHERE ID = $wp_id");
最合适的回答,由SO网友:Sumit 整理而成
这不是bug,实际上WordPress不允许(使用参数)设置修改后的日期。如果您正在更新现有帖子,WordPress会在内部将其设置为当前时间,否则只需将其设置为发布日期即可。
在里面/wp-includes/post.php#L3192
你可以看到wp_insert_post
不使用此参数
if ( $update || \'0000-00-00 00:00:00\' == $post_date ) {
$post_modified = current_time( \'mysql\' );
$post_modified_gmt = current_time( \'mysql\', 1 );
} else {
$post_modified = $post_date;
$post_modified_gmt = $post_date_gmt;
}
文件在我看来不正确。我创建了一个
ticket#36597 为了这个。希望文档能够得到更正。
PS:但是您可以使用wp_insert_post_data
筛选以设置自定义修改日期。
EDIT: WordPress已经运行了一个插入查询,然后运行另一个SQL查询来更新修改后的时间,这不是一个好主意,我们最好在WordPress将其插入数据库之前更改日期。我认为这不会比单独的SQL查询花费太多。
首先在之前添加一个过滤器wp_insert_post
并将其删除,这样不会影响其他插入功能。
add_filter( \'wp_insert_post_data\', \'alter_post_modification_time\', 99, 2 );
$wp_id = wp_insert_post( $wp_test );
remove_filter( \'wp_insert_post_data\', \'alter_post_modification_time\', 99, 2 );
在回调函数中,设置传入的修改时间
wp_insert_post()
函数参数。(
不要忘记添加已从参数中删除的修改后时间)function alter_post_modification_time( $data , $postarr ) {
if (!empty($postarr[\'post_modified\']) && !empty($postarr[\'post_modified_gmt\'])) {
$data[\'post_modified\'] = $postarr[\'post_modified\'];
$data[\'post_modified_gmt\'] = $postarr[\'post_modified_gmt\'];
}
return $data;
}