Posts: In `wp_insert_post()`, don't set `post_date` to current time if it can be derived from a passed value for `post_date_gmt`.

Adds unit tests.

Props oso96_2000, kawauso.
Fixes #15946.


git-svn-id: https://develop.svn.wordpress.org/trunk@34762 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Scott Taylor 2015-10-02 04:35:34 +00:00
parent 5a24a0a4f8
commit a31e54344c
2 changed files with 29 additions and 1 deletions

View File

@ -3012,7 +3012,11 @@ function wp_insert_post( $postarr, $wp_error = false ) {
* is not 'draft' or 'pending', set date to now.
*/
if ( empty( $postarr['post_date'] ) || '0000-00-00 00:00:00' == $postarr['post_date'] ) {
$post_date = current_time( 'mysql' );
if ( empty( $postarr['post_date_gmt'] ) || '0000-00-00 00:00:00' == $postarr['post_date_gmt'] ) {
$post_date = current_time( 'mysql' );
} else {
$post_date = get_date_from_gmt( $postarr['post_date_gmt'] );
}
} else {
$post_date = $postarr['post_date'];
}

View File

@ -1218,4 +1218,28 @@ class Tests_Post extends WP_UnitTestCase {
$this->assertEquals( $this->author_id, get_post( $post_id )->post_author );
}
/**
* @ticket 15946
*/
function test_wp_insert_post_should_respect_post_date_gmt() {
$post = array(
'post_author' => $this->author_id,
'post_status' => 'publish',
'post_content' => rand_str(),
'post_title' => rand_str(),
'post_date_gmt' => '2014-01-01 12:00:00',
);
// insert a post and make sure the ID is ok
$id = wp_insert_post($post);
$out = get_post($id);
$this->assertEquals($post['post_content'], $out->post_content);
$this->assertEquals($post['post_title'], $out->post_title);
$this->assertEquals($post['post_author'], $out->post_author);
$this->assertEquals(get_date_from_gmt($post['post_date_gmt']), $out->post_date);
$this->assertEquals($post['post_date_gmt'], $out->post_date_gmt);
}
}