WordPress.org

Make WordPress Core

Ticket #41293: 41293.4.patch

File 41293.4.patch, 3.3 KB (added by miyauchi, 3 years ago)
  • src/wp-includes/taxonomy.php

     
    18571857 * @return array|WP_Error The requested term data or empty array if no terms found.
    18581858 *                        WP_Error if any of the $taxonomies don't exist.
    18591859 */
    1860 function wp_get_object_terms($object_ids, $taxonomies, $args = array()) {
     1860function wp_get_object_terms( $object_ids, $taxonomies, $args = array() ) {
    18611861        if ( empty( $object_ids ) || empty( $taxonomies ) )
    18621862                return array();
    18631863
    1864         if ( !is_array($taxonomies) )
    1865                 $taxonomies = array($taxonomies);
     1864        if ( ! is_array( $taxonomies ) )
     1865                $taxonomies = array( $taxonomies );
    18661866
    18671867        foreach ( $taxonomies as $taxonomy ) {
    1868                 if ( ! taxonomy_exists($taxonomy) )
     1868                if ( ! taxonomy_exists( $taxonomy ) )
    18691869                        return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
    18701870        }
    18711871
    1872         if ( !is_array($object_ids) )
    1873                 $object_ids = array($object_ids);
    1874         $object_ids = array_map('intval', $object_ids);
     1872        if ( ! is_array( $object_ids ) )
     1873                $object_ids = array( $object_ids );
     1874        $object_ids = array_map( 'intval', $object_ids );
    18751875
    18761876        $args = wp_parse_args( $args );
    18771877
     
    19121912
    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
    19181925        /**
  • tests/phpunit/tests/term/query.php

     
    429429        }
    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         */
    434478        public function test_number_should_work_with_object_ids() {