Make WordPress Core

Changeset 46796


Ignore:
Timestamp:
11/28/2019 01:55:22 PM (7 years ago)
Author:
SergeyBiryukov
Message:

Date/Time: Make get_permalink() more resilient against PHP timezone changes.

Overriding default PHP timezone with date_default_timezone_set(), while not recommended, should not inadvertently result in changing existing permalinks.

Add a unit test.

Props Rarst, steevithak, archon810, maciejmackowiak, Ov3rfly, Cybr, hometowntrailers, scvleon, miette49.
Merges [46795] to the 5.3 branch.
Fixes #48623.

Location:
branches/5.3
Files:
2 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/5.3

  • branches/5.3/src/wp-includes/link-template.php

    r46383 r46796  
    167167
    168168        if ( '' != $permalink && ! in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft', 'future' ) ) ) {
    169                 $unixtime = strtotime( $post->post_date );
    170169
    171170                $category = '';
     
    213212                }
    214213
    215                 $date           = explode( ' ', gmdate( 'Y m d H i s', $unixtime ) );
    216                 $rewritereplace =
    217                 array(
     214                // This is not an API call because the permalink is based on the stored post_date value,
     215                // which should be parsed as local time regardless of the default PHP timezone.
     216                $date = explode( ' ', str_replace( array( '-', ':' ), ' ', $post->post_date ) );
     217
     218                $rewritereplace = array(
    218219                        $date[0],
    219220                        $date[1],
     
    228229                        $post->post_name,
    229230                );
    230                 $permalink      = home_url( str_replace( $rewritecode, $rewritereplace, $permalink ) );
    231                 $permalink      = user_trailingslashit( $permalink, 'single' );
     231
     232                $permalink = home_url( str_replace( $rewritecode, $rewritereplace, $permalink ) );
     233                $permalink = user_trailingslashit( $permalink, 'single' );
     234
    232235        } else { // if they're not using the fancy permalink option
    233236                $permalink = home_url( '?p=' . $post->ID );
Note: See TracChangeset for help on using the changeset viewer.