Posts, Post Types: Reinstate missing sort_column options in get_pages().

This fixes an issue introduced in [55569] that broke sort ordering by `post_modified_gmt` or `modified_gmt`.

Props david.binda, azaozz, spacedmonkey, flixos90, joemcgill.
Fixes #59226.


git-svn-id: https://develop.svn.wordpress.org/trunk@56490 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Joe McGill
2023-08-29 22:03:25 +00:00
parent ab5fd4d56a
commit 3d2f4d5a88
2 changed files with 46 additions and 1 deletions

View File

@@ -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'] );
}

View File

@@ -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.'
);
}
}