mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-07-01 07:40:07 +00:00
Query: Standardize treatment of 'orderby' values post__in, post_parent__in, and post_name__in.
Ordering by `post__in` was introduced in [21776], but the code assumed that `post__in` would be a comma-separated string listing post IDs. When an array of post IDs was passed to the `post__in` query var, 'orderby=post__in' was not respected. This changeset changes this behavior by handling 'orderby=post__in' in the same way as most other values of 'orderby', which ensures that arrays as well as strings can be properly parsed. The same treatment is given to the similar `post_name__in` and `post_parent__in` options of 'orderby', so that most query generation for orderby clauses happens in the same place, instead of in special cases. A slight change in the resulting SQL (related to the whitespace around parentheses and commas) necessitates a change to an existing REST API test that does a string comparison against the SQL query. Props mgibbs189, kelvink. Fixes #38034. git-svn-id: https://develop.svn.wordpress.org/trunk@44452 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -174,6 +174,38 @@ class Tests_Post_Query extends WP_UnitTestCase {
|
||||
$this->assertSame( $ordered, wp_list_pluck( $q->posts, 'ID' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 38034
|
||||
*/
|
||||
public function test_orderby_post__in_array() {
|
||||
$posts = self::factory()->post->create_many( 4 );
|
||||
|
||||
$ordered = array( $posts[2], $posts[0], $posts[3] );
|
||||
|
||||
$q = new WP_Query( array(
|
||||
'post_type' => 'any',
|
||||
'post__in' => $ordered,
|
||||
'orderby' => array( 'post__in' => 'ASC' ),
|
||||
) );
|
||||
$this->assertSame( $ordered, wp_list_pluck( $q->posts, 'ID' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 38034
|
||||
*/
|
||||
public function test_orderby_post__in_array_with_implied_order() {
|
||||
$posts = self::factory()->post->create_many( 4 );
|
||||
|
||||
$ordered = array( $posts[2], $posts[0], $posts[3] );
|
||||
|
||||
$q = new WP_Query( array(
|
||||
'post_type' => 'any',
|
||||
'post__in' => $ordered,
|
||||
'orderby' => 'post__in',
|
||||
) );
|
||||
$this->assertSame( $ordered, wp_list_pluck( $q->posts, 'ID' ) );
|
||||
}
|
||||
|
||||
function test_post__in_attachment_ordering() {
|
||||
$post_id = self::factory()->post->create();
|
||||
$att_ids = array();
|
||||
|
||||
Reference in New Issue
Block a user