WordPress.org

Make WordPress Core

Ticket #38442: 38442.diff

File 38442.diff, 3.0 KB (added by desrosj, 3 years ago)
  • src/wp-includes/class-wp-query.php

     
    15711571                $primary_meta_key   = '';
    15721572                $primary_meta_query = false;
    15731573                $meta_clauses       = $this->meta_query->get_clauses();
     1574
    15741575                if ( ! empty( $meta_clauses ) ) {
    1575                         $primary_meta_query = reset( $meta_clauses );
     1576                        $primary_meta_query = false;
     1577
     1578                        foreach ( $meta_clauses as $meta_clause ) {
     1579                                if ( $meta_clause['key'] == $orderby ) {
     1580                                        $primary_meta_query = $meta_clause;
     1581                                        break;
     1582                                }
     1583                        }
     1584
     1585                        if ( ! $primary_meta_query ) {
     1586                                $primary_meta_query = reset( $meta_clauses );
     1587                        }
    15761588
    15771589                        if ( ! empty( $primary_meta_query['key'] ) ) {
    15781590                                $primary_meta_key = $primary_meta_query['key'];
  • tests/phpunit/tests/query/metaQuery.php

     
    17831783        }
    17841784
    17851785        /**
     1786         * Test ordering by multiple meta keys.
     1787         *
     1788         * @ticket 38442
     1789         */
     1790        function test_orderby_clause_two_meta_keys() {
     1791                $posts = self::factory()->post->create_many( 4 );
     1792
     1793                add_post_meta( $posts[0], 'foo', 'jjj' );
     1794                add_post_meta( $posts[1], 'foo', 'zzz' );
     1795                add_post_meta( $posts[2], 'foo', 'aaa' );
     1796                add_post_meta( $posts[3], 'foo', 'aaa' );
     1797
     1798                add_post_meta( $posts[3], 'bar', 150 );
     1799                add_post_meta( $posts[2], 'bar', 100 );
     1800                add_post_meta( $posts[1], 'bar', 200 );
     1801                add_post_meta( $posts[0], 'bar', 300 );
     1802
     1803                $query_args = array(
     1804                        'fields'     => 'ids',
     1805                        'post_type'  => 'any',
     1806                        'meta_query' => array(
     1807                                'relation' => 'AND',
     1808                                array(
     1809                                        'key' => 'foo',
     1810                                ),
     1811                                array(
     1812                                        'key'  => 'bar',
     1813                                        'type' => 'UNSIGNED',
     1814                                ),
     1815                        ),
     1816                        'orderby'    => array(
     1817                                'foo' => 'ASC',
     1818                                'bar' => 'ASC',
     1819                        ),
     1820                );
     1821
     1822                $query = new WP_Query( $query_args );
     1823
     1824                $this->assertEquals( array( $posts[2], $posts[3], $posts[0], $posts[1] ), $query->posts );
     1825                $this->assertEquals( 2, substr_count( $query->request, 'ASC' ) );
     1826                $this->assertEquals( 1, substr_count( $query->request, 'CAST(' ) );
     1827
     1828                $query_args['orderby'] = array(
     1829                        'foo' => 'ASC',
     1830                        'bar' => 'DESC',
     1831                );
     1832                $query                 = new WP_Query( $query_args );
     1833
     1834                $this->assertEquals( array( $posts[3], $posts[2], $posts[0], $posts[1] ), $query->posts );
     1835                $this->assertEquals( 1, substr_count( $query->request, 'ASC' ) );
     1836                $this->assertEquals( 1, substr_count( $query->request, 'DESC' ) );
     1837
     1838                $query_args['orderby'] = array(
     1839                        'foo' => 'DESC',
     1840                        'bar' => 'DESC',
     1841                );
     1842                $query                 = new WP_Query( $query_args );
     1843
     1844                $this->assertEquals( array( $posts[1], $posts[0], $posts[3], $posts[2] ), $query->posts );
     1845                $this->assertEquals( 2, substr_count( $query->request, 'DESC' ) );
     1846        }
     1847
     1848        /**
    17861849         * @ticket 31045
    17871850         */
    17881851        public function test_orderby_more_than_one_clause_key() {