diff --git a/src/wp-includes/link-template.php b/src/wp-includes/link-template.php index 9419633632..5698ded47a 100644 --- a/src/wp-includes/link-template.php +++ b/src/wp-includes/link-template.php @@ -166,7 +166,6 @@ function get_permalink( $post = 0, $leavename = false ) { $permalink = apply_filters( 'pre_post_link', $permalink, $post, $leavename ); if ( '' != $permalink && ! in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft', 'future' ) ) ) { - $unixtime = strtotime( $post->post_date ); $category = ''; if ( strpos( $permalink, '%category%' ) !== false ) { @@ -212,9 +211,11 @@ function get_permalink( $post = 0, $leavename = false ) { $author = $authordata->user_nicename; } - $date = explode( ' ', gmdate( 'Y m d H i s', $unixtime ) ); - $rewritereplace = - array( + // This is not an API call because the permalink is based on the stored post_date value, + // which should be parsed as local time regardless of the default PHP timezone. + $date = explode( ' ', str_replace( array( '-', ':' ), ' ', $post->post_date ) ); + + $rewritereplace = array( $date[0], $date[1], $date[2], @@ -227,8 +228,10 @@ function get_permalink( $post = 0, $leavename = false ) { $author, $post->post_name, ); - $permalink = home_url( str_replace( $rewritecode, $rewritereplace, $permalink ) ); - $permalink = user_trailingslashit( $permalink, 'single' ); + + $permalink = home_url( str_replace( $rewritecode, $rewritereplace, $permalink ) ); + $permalink = user_trailingslashit( $permalink, 'single' ); + } else { // if they're not using the fancy permalink option $permalink = home_url( '?p=' . $post->ID ); } diff --git a/tests/phpunit/tests/date/getPermalink.php b/tests/phpunit/tests/date/getPermalink.php new file mode 100644 index 0000000000..0b6d86b13f --- /dev/null +++ b/tests/phpunit/tests/date/getPermalink.php @@ -0,0 +1,39 @@ +post->create( + array( + 'post_date' => '2018-07-22 21:13:23', + 'post_date_gmt' => '2018-07-23 03:13:23', + ) + ); + + $this->assertEquals( 'http://example.org/2018/07/22/21/13/23', get_permalink( $post_id ) ); + + date_default_timezone_set( $timezone ); + $this->assertEquals( 'http://example.org/2018/07/22/21/13/23', get_permalink( $post_id ) ); + } +}