WordPress.org

Make WordPress Core

Changeset 41809


Ignore:
Timestamp:
10/10/17 16:45:01 (3 months ago)
Author:
boonebgorges
Message:

Taxonomy: Don't discard keys when merging queried terms from different taxonomies.

For values of fields like id=>parent, the keys of the array must be
maintained as part of the query results.

Introduced as part of #40496. See [38667], [40513].

Props miyauchi, dany2217, pcarvalho.
Fixes #41293.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/taxonomy.php

    r41688 r41809  
    19131913    // Taxonomies registered without an 'args' param are handled here. 
    19141914    if ( ! empty( $taxonomies ) ) { 
    1915         $terms = array_merge( $terms, get_terms( $args ) ); 
     1915        $terms_from_remaining_taxonomies = get_terms( $args ); 
     1916 
     1917        // Array keys should be preserved for values of $fields that use term_id for keys. 
     1918        if ( ! empty( $args['fields'] ) && 0 === strpos( $args['fields'], 'id=>' ) ) { 
     1919            $terms = $terms + $terms_from_remaining_taxonomies; 
     1920        } else { 
     1921            $terms = array_merge( $terms, $terms_from_remaining_taxonomies ); 
     1922        } 
    19161923    } 
    19171924 
  • trunk/tests/phpunit/tests/term/query.php

    r41377 r41809  
    430430 
    431431    /** 
     432     * @ticket 41293 
     433     */ 
     434    public function test_should_allow_same_args_with_the_get_terms() { 
     435        register_post_type( 'wptests_pt' ); 
     436        register_taxonomy( 'wptests_tax', 'wptests_pt' ); 
     437        $t1 = self::factory()->term->create( array( 
     438            'taxonomy' => 'wptests_tax', 
     439            'name' => 'foo', 
     440            'slug' => 'bar', 
     441        ) ); 
     442        $t2 = self::factory()->term->create( array( 
     443            'taxonomy' => 'wptests_tax', 
     444            'name' => 'bar', 
     445            'slug' => 'foo', 
     446        ) ); 
     447 
     448        $p = self::factory()->post->create( array( 
     449            'post_type' => 'wptests_pt', 
     450        ) ); 
     451 
     452        wp_set_object_terms( $p, array( $t1, $t2 ), 'wptests_tax' ); 
     453 
     454        $expected = wp_get_post_terms( $p, 'wptests_tax', array( 
     455            'fields' => 'ids', 
     456        ) ); 
     457 
     458        $found1 = array_keys( wp_get_object_terms( $p, 'wptests_tax', array( 
     459            'fields' => 'id=>parent', 
     460        ) ) ); 
     461 
     462        $found2 = array_keys( wp_get_object_terms( $p, 'wptests_tax', array( 
     463            'fields' => 'id=>slug', 
     464        ) ) ); 
     465 
     466        $found3 = array_keys( wp_get_object_terms( $p, 'wptests_tax', array( 
     467            'fields' => 'id=>name', 
     468        ) ) ); 
     469 
     470        $this->assertSame( $expected, $found1 ); 
     471        $this->assertSame( $expected, $found2 ); 
     472        $this->assertSame( $expected, $found3 ); 
     473    } 
     474 
     475    /** 
    432476     * @ticket 41796 
    433477     */ 
Note: See TracChangeset for help on using the changeset viewer.