WordPress.org

Make WordPress Core

Ticket #40496: 40496.2.diff

File 40496.2.diff, 3.3 KB (added by danielbachhuber, 5 years ago)
  • src/wp-includes/taxonomy.php

    diff --git a/src/wp-includes/taxonomy.php b/src/wp-includes/taxonomy.php
    index 94f36689fd..9813550132 100644
    a b function wp_get_object_terms($object_ids, $taxonomies, $args = array()) { 
    18401840        $object_ids = array_map('intval', $object_ids);
    18411841
    18421842        $args = wp_parse_args( $args );
     1843        $terms = array();
     1844        if ( count( $taxonomies ) > 1 ) {
     1845                foreach ( $taxonomies as $index => $taxonomy ) {
     1846                        $t = get_taxonomy( $taxonomy );
     1847                        if ( isset( $t->args ) && is_array( $t->args ) && $args != array_merge( $args, $t->args ) ) {
     1848                                unset( $taxonomies[ $index ] );
     1849                                $terms = array_merge( $terms, wp_get_object_terms( $object_ids, $taxonomy, array_merge( $args, $t->args ) ) );
     1850                        }
     1851                }
     1852        } else {
     1853                $t = get_taxonomy( $taxonomies[0] );
     1854                if ( isset( $t->args ) && is_array( $t->args ) ) {
     1855                        $args = array_merge( $args, $t->args );
     1856                }
     1857        }
    18431858
    18441859        $args['taxonomy'] = $taxonomies;
    18451860        $args['object_ids'] = $object_ids;
    18461861
    1847         $terms = get_terms( $args );
     1862        $terms = array_merge( $terms, get_terms( $args ) );
    18481863
    18491864        /**
    18501865         * Filters the terms for a given object or objects.
  • tests/phpunit/tests/term/query.php

    diff --git a/tests/phpunit/tests/term/query.php b/tests/phpunit/tests/term/query.php
    index 4a15f1e53f..26539e8ce2 100644
    a b class Tests_Term_Query extends WP_UnitTestCase { 
    381381                $count = $query->get_terms();
    382382                $this->assertEquals( 1, $count );
    383383        }
     384
     385        /**
     386         * @ticket 40496
     387         */
     388        public function test_get_the_terms_should_respect_taxonomy_orderby() {
     389                register_taxonomy( 'wptests_tax', 'post', array(
     390                        'sort' => true,
     391                        'args' => array(
     392                                'orderby' => 'term_order',
     393                        ),
     394                ) );
     395                $term_ids = self::factory()->term->create_many( 2, array(
     396                        'taxonomy' => 'wptests_tax',
     397                ) );
     398                $post_id = self::factory()->post->create();
     399                wp_set_object_terms( $post_id, array( $term_ids[0], $term_ids[1] ), 'wptests_tax' );
     400                $terms = get_the_terms( $post_id, 'wptests_tax' );
     401                $this->assertEquals( array( $term_ids[0], $term_ids[1] ), wp_list_pluck( $terms, 'term_id' ) );
     402                // Flip the order
     403                wp_set_object_terms( $post_id, array( $term_ids[1], $term_ids[0] ), 'wptests_tax' );
     404                $terms = get_the_terms( $post_id, 'wptests_tax' );
     405                $this->assertEquals( array( $term_ids[1], $term_ids[0] ), wp_list_pluck( $terms, 'term_id' ) );
     406        }
     407
     408        public function test_wp_get_object_terms_should_respect_taxonomy_orderby() {
     409                register_taxonomy( 'wptests_tax', 'post', array(
     410                        'sort' => true,
     411                        'args' => array(
     412                                'orderby' => 'term_order',
     413                        ),
     414                ) );
     415                $term_ids = self::factory()->term->create_many( 2, array(
     416                        'taxonomy' => 'wptests_tax',
     417                ) );
     418                $post_id = self::factory()->post->create();
     419                wp_set_object_terms( $post_id, array( $term_ids[0], $term_ids[1] ), 'wptests_tax' );
     420                $terms = wp_get_object_terms( $post_id, array( 'category', 'wptests_tax' ) );
     421                $this->assertEquals( array( $term_ids[0], $term_ids[1], 1 ), wp_list_pluck( $terms, 'term_id' ) );
     422                // Flip the order
     423                wp_set_object_terms( $post_id, array( $term_ids[1], $term_ids[0] ), 'wptests_tax' );
     424                $terms = wp_get_object_terms( $post_id, array( 'category', 'wptests_tax' ) );
     425                $this->assertEquals( array( $term_ids[1], $term_ids[0], 1 ), wp_list_pluck( $terms, 'term_id' ) );
     426        }
    384427}