diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 5367f51e06..0bd4fc7a9f 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -6066,8 +6066,22 @@ function get_pages( $args = array() ) { $query_args['post_parent'] = $parent; } + /* + * Maintain backward compatibility for `sort_column` key. + * Additionally to `WP_Query`, it has been supporting the `post_modified_gmt` field, so this logic will translate + * it to `post_modified` which should result in the same order given the two dates in the fields match. + */ $orderby = wp_parse_list( $parsed_args['sort_column'] ); - $orderby = array_map( 'trim', $orderby ); + $orderby = array_map( + static function( $orderby_field ) { + $orderby_field = trim( $orderby_field ); + if ( 'post_modified_gmt' === $orderby_field || 'modified_gmt' === $orderby_field ) { + $orderby_field = str_replace( '_gmt', '', $orderby_field ); + } + return $orderby_field; + }, + $orderby + ); if ( $orderby ) { $query_args['orderby'] = array_fill_keys( $orderby, $parsed_args['sort_order'] ); } diff --git a/tests/phpunit/tests/post/getPages.php b/tests/phpunit/tests/post/getPages.php index 92de3356fa..e72ba3e2ed 100644 --- a/tests/phpunit/tests/post/getPages.php +++ b/tests/phpunit/tests/post/getPages.php @@ -1181,4 +1181,35 @@ class Tests_Post_GetPages extends WP_UnitTestCase { 'Check that ORDER is post date.' ); } + + /** + * Tests that the legacy `post_modified_gmt` orderby values are translated to the proper `WP_Query` values. + * + * @ticket 59226 + */ + public function test_get_pages_order_by_post_modified_gmt() { + global $wpdb; + + get_pages( + array( + 'sort_column' => 'post_modified_gmt', + ) + ); + $this->assertStringContainsString( + "ORDER BY $wpdb->posts.post_modified ASC", + $wpdb->last_query, + 'Check that ORDER is post modified when using post_modified_gmt.' + ); + + get_pages( + array( + 'sort_column' => 'modified_gmt', + ) + ); + $this->assertStringContainsString( + "ORDER BY $wpdb->posts.post_modified ASC", + $wpdb->last_query, + 'Check that ORDER is post modified when using modified_gmt.' + ); + } }