Make WordPress Core

Ticket #41350: 41350-order-by-rand.diff

File 41350-order-by-rand.diff, 3.1 KB (added by bretterer, 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 12e7dec242..f43fdd3f4b 100644
    a b class WP_Term_Query { 
    9999         *                                                'slug', 'term_group', 'term_id', 'id', 'description', 'parent'),
    100100         *                                                'count' for term taxonomy count, 'include' to match the
    101101         *                                                'order' of the $include param, 'meta_value', 'meta_value_num',
    102          *                                                the value of `$meta_key`, the array keys of `$meta_query`, or
    103          *                                                'none' to omit the ORDER BY clause. Defaults to 'name'.
     102     *                                                the value of `$meta_key`, the array keys of `$meta_query`, 'rand'
     103     *                                                for a random selection, or 'none' to omit the ORDER BY clause.
     104     *                                                Defaults to 'name'.
    104105         *     @type string       $order                  Whether to order terms in ascending or descending order.
    105106         *                                                Accepts 'ASC' (ascending) or 'DESC' (descending).
    106107         *                                                Default 'ASC'.
    class WP_Term_Query { 
    834835                        $orderby = '';
    835836                } elseif ( empty( $_orderby ) || 'id' == $_orderby || 'term_id' === $_orderby ) {
    836837                        $orderby = 't.term_id';
    837                 } else {
     838                } elseif ( in_array( $_orderby, array( 'rand', 'random', 'rand()' ), true ) ) {
     839                    $orderby = 'rand()';
     840        } else {
    838841                        $orderby = 't.name';
    839842
    840843                        // This may be a value of orderby related to meta.
  • tests/phpunit/tests/term/query.php

    diff --git a/tests/phpunit/tests/term/query.php b/tests/phpunit/tests/term/query.php
    index b2e2a27621..84634fbddd 100644
    a b class Tests_Term_Query extends WP_UnitTestCase { 
    143143                return $clauses;
    144144        }
    145145
     146    /**
     147     * @ticket 41350
     148     */
     149    public function test_order_by_rand() {
     150        register_taxonomy( 'wptests_tax', 'post' );
     151        $posts = self::factory()->post->create_many( 10, array( 'taxonomy' => 'wptests_tax' ) );
     152
     153        $q = new WP_Term_Query( array(
     154            'taxonomy' => array( 'wptests_tax' ),
     155            'orderby' => 'rand',
     156            'hide_empty' => false,
     157        ) );
     158        $this->assertContains( 'ORDER BY rand()', $q->request );
     159
     160        $q2 = new WP_Term_Query( array(
     161            'taxonomy' => array( 'wptests_tax' ),
     162            'orderby' => 'random',
     163            'hide_empty' => false,
     164        ) );
     165        $this->assertContains( 'ORDER BY rand()', $q2->request );
     166
     167        $q3 = new WP_Term_Query( array(
     168            'taxonomy' => array( 'wptests_tax' ),
     169            'orderby' => 'rand()',
     170            'hide_empty' => false,
     171        ) );
     172        $this->assertContains( 'ORDER BY rand()', $q3->request );
     173       
     174    }
     175
    146176        /**
    147177         * @ticket 37198
    148178         */