Make WordPress Core


Ignore:
Timestamp:
02/05/2015 07:37:47 PM (12 years ago)
Author:
boonebgorges
Message:

Modify `meta_query orderby syntax to use array keys as clause "handles".

The implementation of meta_query orderby introduced in [31312] put clause
identifiers into a 'name' parameter of the clause. For greater clarity, this
changeset updates the syntax to use the associative array key used when
defining meta_query parameters, instead of the 'name' parameter.

Props Funkatronic, DrewAPicture.
Fixes #31045.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/query/metaQuery.php

    r31312 r31340  
    15631563         * @ticket 31045
    15641564         */
    1565         public function test_orderby_name() {
     1565        public function test_orderby_clause_key() {
    15661566                $posts = $this->factory->post->create_many( 3 );
    15671567                add_post_meta( $posts[0], 'foo', 'aaa' );
    … …  
    15721572                        'fields' => 'ids',
    15731573                        'meta_query' => array(
    1574                                 array(
    1575                                         'name' => 'foo_name',
     1574                                'foo_key' => array(
    15761575                                        'key' => 'foo',
    15771576                                        'compare' => 'EXISTS',
    15781577                                ),
    15791578                        ),
    1580                         'orderby' => 'foo_name',
     1579                        'orderby' => 'foo_key',
    15811580                        'order' => 'DESC',
    15821581                ) );
    … …  
    15881587         * @ticket 31045
    15891588         */
    1590         public function test_orderby_name_as_secondary_sort() {
     1589        public function test_orderby_clause_key_as_secondary_sort() {
    15911590                $p1 = $this->factory->post->create( array(
    15921591                        'post_date' => '2015-01-28 03:00:00',
    … …  
    16061605                        'fields' => 'ids',
    16071606                        'meta_query' => array(
    1608                                 array(
    1609                                         'name' => 'foo_name',
     1607                                'foo_key' => array(
    16101608                                        'key' => 'foo',
    16111609                                        'compare' => 'EXISTS',
    … …  
    16141612                        'orderby' => array(
    16151613                                'post_date' => 'asc',
    1616                                 'foo_name' => 'asc',
     1614                                'foo_key' => 'asc',
    16171615                        ),
    16181616                ) );
    … …  
    16241622         * @ticket 31045
    16251623         */
    1626         public function test_orderby_more_than_one_name() {
     1624        public function test_orderby_more_than_one_clause_key() {
    16271625                $posts = $this->factory->post->create_many( 3 );
    16281626
    … …  
    16371635                        'fields' => 'ids',
    16381636                        'meta_query' => array(
    1639                                 array(
    1640                                         'name' => 'foo_name',
     1637                                'foo_key' => array(
    16411638                                        'key' => 'foo',
    16421639                                        'compare' => 'EXISTS',
    16431640                                ),
    1644                                 array(
    1645                                         'name' => 'bar_name',
     1641                                'bar_key' => array(
    16461642                                        'key' => 'bar',
    16471643                                        'compare' => 'EXISTS',
    … …  
    16491645                        ),
    16501646                        'orderby' => array(
    1651                                 'foo_name' => 'asc',
    1652                                 'bar_name' => 'desc',
     1647                                'foo_key' => 'asc',
     1648                                'bar_key' => 'desc',
    16531649                        ),
    16541650                ) );
    … …  
    16561652                $this->assertEquals( array( $posts[2], $posts[0], $posts[1] ), $q->posts );
    16571653        }
     1654
     1655        /**
     1656         * @ticket 31045
     1657         */
     1658        public function test_duplicate_clause_keys_should_be_made_unique() {
     1659                $q = new WP_Query( array(
     1660                        'fields' => 'ids',
     1661                        'meta_query' => array(
     1662                                'foo_key' => array(
     1663                                        'key' => 'foo',
     1664                                        'compare' => 'EXISTS',
     1665                                ),
     1666                                array(
     1667                                        'foo_key' => array(
     1668                                                'key' => 'bar',
     1669                                                'compare' => 'EXISTS',
     1670                                        ),
     1671                                ),
     1672                                array(
     1673                                        'foo_key' => array(
     1674                                                'key' => 'baz',
     1675                                                'compare' => 'EXISTS',
     1676                                        ),
     1677                                ),
     1678                        ),
     1679                ) );
     1680
     1681                $this->assertEqualSets( array( 'foo_key', 'foo_key-1', 'foo_key-2' ), array_keys( $q->meta_query->get_clauses() ) );
     1682        }
    16581683}
Note: See TracChangeset for help on using the changeset viewer.