无法在wp_INSERT_POST中编辑POST_MODIFIED(错误?)

时间:2016-04-19 作者:Gijs

它看起来像一个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");

1 个回复
最合适的回答,由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;
}

相关推荐