Make WordPress Core

Ticket #40826: 40826.diff

File 40826.diff, 12.5 KB (added by wonderboymusic, 7 years ago)
  • src/wp-includes/class-wp-term-query.php

    diff --git a/src/wp-includes/class-wp-term-query.php b/src/wp-includes/class-wp-term-query.php
    index 12e7dec..6da3b37 100644
    a b class WP_Term_Query { 
    9898         *     @type string       $orderby                Field(s) to order terms by. Accepts term fields ('name',
    9999         *                                                'slug', 'term_group', 'term_id', 'id', 'description', 'parent'),
    100100         *                                                'count' for term taxonomy count, 'include' to match the
    101          *                                                'order' of the $include param, 'meta_value', 'meta_value_num',
     101         *                                                'order' of the $include param, 'slug__in' to match the
     102         *                                                'order' of the $slug param, 'meta_value', 'meta_value_num',
    102103         *                                                the value of `$meta_key`, the array keys of `$meta_query`, or
    103104         *                                                'none' to omit the ORDER BY clause. Defaults to 'name'.
    104105         *     @type string       $order                  Whether to order terms in ascending or descending order.
    class WP_Term_Query { 
    830831                } elseif ( 'include' == $_orderby && ! empty( $this->query_vars['include'] ) ) {
    831832                        $include = implode( ',', wp_parse_id_list( $this->query_vars['include'] ) );
    832833                        $orderby = "FIELD( t.term_id, $include )";
     834                } elseif ( 'slug__in' == $_orderby && ! empty( $this->query_vars['slug'] ) && is_array( $this->query_vars['slug'] ) ) {
     835                        $slugs = implode( "', '", array_map( 'sanitize_title', $this->query_vars['slug__in'] ) );
     836                        $orderby = "FIELD( t.slug, '" . $slugs . "')";
    833837                } elseif ( 'none' == $_orderby ) {
    834838                        $orderby = '';
    835839                } elseif ( empty( $_orderby ) || 'id' == $_orderby || 'term_id' === $_orderby ) {
  • src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

    diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
    index 417dce0..807ee84 100644
    a b class WP_REST_Posts_Controller extends WP_REST_Controller { 
    873873                // Map to proper WP_Query orderby param.
    874874                if ( isset( $query_args['orderby'] ) && isset( $request['orderby'] ) ) {
    875875                        $orderby_mappings = array(
    876                                 'id'      => 'ID',
    877                                 'include' => 'post__in',
    878                                 'slug'    => 'post_name',
     876                                'id'             => 'ID',
     877                                'include'        => 'post__in',
     878                                'slug'           => 'post_name',
     879                                'included_slugs' => 'post_name__in',
    879880                        );
    880881
    881882                        if ( isset( $orderby_mappings[ $request['orderby'] ] ) ) {
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    21052106                                'parent',
    21062107                                'relevance',
    21072108                                'slug',
     2109                                'included_slugs',
    21082110                                'title',
    21092111                        ),
    21102112                );
  • src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php

    diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php
    index 0723022..6494071 100644
    a b class WP_REST_Terms_Controller extends WP_REST_Controller { 
    188188                        }
    189189                }
    190190
     191                if ( isset( $prepared_args['orderby'] ) && isset( $request['orderby'] ) ) {
     192                        $orderby_mappings = array(
     193                                'included_slugs' => 'slug__in',
     194                        );
     195
     196                        if ( isset( $orderby_mappings[ $request['orderby'] ] ) ) {
     197                                $prepared_args['orderby'] = $orderby_mappings[ $request['orderby'] ];
     198                        }
     199                }
     200
    191201                if ( isset( $registered['offset'] ) && ! empty( $request['offset'] ) ) {
    192202                        $prepared_args['offset'] = $request['offset'];
    193203                } else {
    class WP_REST_Terms_Controller extends WP_REST_Controller { 
    930940                                'include',
    931941                                'name',
    932942                                'slug',
     943                                'included_slugs',
    933944                                'term_group',
    934945                                'description',
    935946                                'count',
  • src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

    diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php
    index 5afe3a2..6ccf357 100644
    a b class WP_REST_Users_Controller extends WP_REST_Controller { 
    243243                                'name'            => 'display_name',
    244244                                'registered_date' => 'registered',
    245245                                'slug'            => 'user_nicename',
     246                                'included_slugs'  => 'nicename__in',
    246247                                'email'           => 'user_email',
    247248                                'url'             => 'user_url',
    248249                        );
    class WP_REST_Users_Controller extends WP_REST_Controller { 
    13241325                                'name',
    13251326                                'registered_date',
    13261327                                'slug',
     1328                                'included_slugs',
    13271329                                'email',
    13281330                                'url',
    13291331                        ),
  • tests/phpunit/tests/rest-api/rest-categories-controller.php

    diff --git a/tests/phpunit/tests/rest-api/rest-categories-controller.php b/tests/phpunit/tests/rest-api/rest-categories-controller.php
    index fbf7d06..30b1a9c 100644
    a b class WP_Test_REST_Categories_Controller extends WP_Test_REST_Controller_Testcas 
    287287                $this->assertEquals( 'Cantaloupe', $data[2]['name'] );
    288288        }
    289289
     290        public function test_get_items_orderby_slugs() {
     291                $this->factory->category->create( array( 'name' => 'Burrito' ) );
     292                $this->factory->category->create( array( 'name' => 'Taco' ) );
     293                $this->factory->category->create( array( 'name' => 'Chalupa' ) );
     294
     295                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     296                $request->set_param( 'orderby', 'included_slugs' );
     297                $request->set_param( 'slug', array( 'taco', 'burrito', 'chalupa' ) );
     298                $response = $this->server->dispatch( $request );
     299                $data = $response->get_data();
     300                $this->assertEquals( 200, $response->get_status() );
     301                $this->assertEquals( 'taco', $data[0]['slug'] );
     302                $this->assertEquals( 'burrito', $data[1]['slug'] );
     303                $this->assertEquals( 'chalupa', $data[2]['slug'] );
     304        }
     305
    290306        protected function post_with_categories() {
    291307                $post_id = $this->factory->post->create();
    292308                $category1 = $this->factory->category->create( array(
  • tests/phpunit/tests/rest-api/rest-posts-controller.php

    diff --git a/tests/phpunit/tests/rest-api/rest-posts-controller.php b/tests/phpunit/tests/rest-api/rest-posts-controller.php
    index c86879c..650cafe 100644
    a b class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te 
    598598                $this->assertPostsOrderedBy( '{posts}.post_name DESC' );
    599599        }
    600600
     601        public function test_get_items_with_orderby_slugs() {
     602                $slugs = array( 'burrito', 'taco', 'chalupa' );
     603                foreach ( $slugs as $slug ) {
     604                        $this->factory->post->create( array( 'post_title' => $slug, 'post_name' => $slug, 'post_status' => 'publish' ) );
     605                }
     606
     607                $request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
     608                $request->set_param( 'orderby', 'included_slugs' );
     609                $request->set_param( 'slug', array( 'taco', 'chalupa', 'burrito' ) );
     610
     611                $response = $this->server->dispatch( $request );
     612                $data = $response->get_data();
     613
     614                $this->assertEquals( 'taco', $data[0]['slug'] );
     615                $this->assertEquals( 'chalupa', $data[1]['slug'] );
     616                $this->assertEquals( 'burrito', $data[2]['slug'] );
     617        }
     618
    601619        public function test_get_items_with_orderby_relevance() {
    602620                $id1 = $this->factory->post->create( array( 'post_title' => 'Title is more relevant', 'post_content' => 'Content is', 'post_status' => 'publish' ) );
    603621                $id2 = $this->factory->post->create( array( 'post_title' => 'Title is', 'post_content' => 'Content is less relevant', 'post_status' => 'publish' ) );
  • tests/phpunit/tests/rest-api/rest-tags-controller.php

    diff --git a/tests/phpunit/tests/rest-api/rest-tags-controller.php b/tests/phpunit/tests/rest-api/rest-tags-controller.php
    index fccc4d7..a128590 100644
    a b class WP_Test_REST_Tags_Controller extends WP_Test_REST_Controller_Testcase { 
    250250                $this->assertEquals( 'Cantaloupe', $data[2]['name'] );
    251251        }
    252252
     253        public function test_get_items_orderby_slugs() {
     254                $this->factory->tag->create( array( 'name' => 'Burrito' ) );
     255                $this->factory->tag->create( array( 'name' => 'Taco' ) );
     256                $this->factory->tag->create( array( 'name' => 'Chalupa' ) );
     257
     258                $request = new WP_REST_Request( 'GET', '/wp/v2/tags' );
     259                $request->set_param( 'orderby', 'included_slugs' );
     260                $request->set_param( 'slug', array( 'taco', 'burrito', 'chalupa' ) );
     261                $response = $this->server->dispatch( $request );
     262                $data = $response->get_data();
     263                $this->assertEquals( 200, $response->get_status() );
     264                $this->assertEquals( 'taco', $data[0]['slug'] );
     265                $this->assertEquals( 'burrito', $data[1]['slug'] );
     266                $this->assertEquals( 'chalupa', $data[2]['slug'] );
     267        }
     268
    253269        public function test_get_items_post_args() {
    254270                $post_id = $this->factory->post->create();
    255271                $tag1 = $this->factory->tag->create( array( 'name' => 'DC' ) );
  • tests/phpunit/tests/rest-api/rest-users-controller.php

    diff --git a/tests/phpunit/tests/rest-api/rest-users-controller.php b/tests/phpunit/tests/rest-api/rest-users-controller.php
    index 3024693..6fdba3b 100644
    a b class WP_Test_REST_Users_Controller extends WP_Test_REST_Controller_Testcase { 
    409409                $this->assertEquals( $low_id, $data[0]['id'] );
    410410        }
    411411
     412        public function test_get_items_orderby_slugs() {
     413                wp_set_current_user( self::$user );
     414
     415                $this->factory->user->create( array( 'user_nicename' => 'burrito' ) );
     416                $this->factory->user->create( array( 'user_nicename' => 'taco' ) );
     417                $this->factory->user->create( array( 'user_nicename' => 'chalupa' ) );
     418
     419                $request = new WP_REST_Request( 'GET', '/wp/v2/users' );
     420                $request->set_param( 'orderby', 'included_slugs' );
     421                $request->set_param( 'slug', array( 'taco', 'burrito', 'chalupa' ) );
     422                $response = $this->server->dispatch( $request );
     423                $data = $response->get_data();
     424
     425                $this->assertEquals( 'taco', $data[0]['slug'] );
     426                $this->assertEquals( 'burrito', $data[1]['slug'] );
     427                $this->assertEquals( 'chalupa', $data[2]['slug'] );
     428        }
     429
    412430        public function test_get_items_orderby_email() {
    413431                wp_set_current_user( self::$user );
    414432
  • tests/qunit/fixtures/wp-api-generated.js

    diff --git a/tests/qunit/fixtures/wp-api-generated.js b/tests/qunit/fixtures/wp-api-generated.js
    index 679d024..ebd91d7 100644
    a b mockedApiResponse.Schema = { 
    284284                                "parent",
    285285                                "relevance",
    286286                                "slug",
     287                                "included_slugs",
    287288                                "title"
    288289                            ],
    289290                            "description": "Sort collection by object attribute.",
    mockedApiResponse.Schema = { 
    905906                                "parent",
    906907                                "relevance",
    907908                                "slug",
     909                                "included_slugs",
    908910                                "title",
    909911                                "menu_order"
    910912                            ],
    mockedApiResponse.Schema = { 
    14431445                                "parent",
    14441446                                "relevance",
    14451447                                "slug",
     1448                                "included_slugs",
    14461449                                "title"
    14471450                            ],
    14481451                            "description": "Sort collection by object attribute.",
    mockedApiResponse.Schema = { 
    20232026                                "include",
    20242027                                "name",
    20252028                                "slug",
     2029                                "included_slugs",
    20262030                                "term_group",
    20272031                                "description",
    20282032                                "count"
    mockedApiResponse.Schema = { 
    22662270                                "include",
    22672271                                "name",
    22682272                                "slug",
     2273                                "included_slugs",
    22692274                                "term_group",
    22702275                                "description",
    22712276                                "count"
    mockedApiResponse.Schema = { 
    24952500                                "name",
    24962501                                "registered_date",
    24972502                                "slug",
     2503                                "included_slugs",
    24982504                                "email",
    24992505                                "url"
    25002506                            ],