WordPress.org

Make WordPress Core

Ticket #41293: 41293.patch

File 41293.patch, 2.6 KB (added by miyauchi, 3 years ago)

I created a patch which contains tests to represent this problem.

  • 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
     
    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_with_args = $test_array = get_terms( $args );
     1916                if ( array_values( $test_array ) === $test_array ) {
     1917                        $terms = array_merge( $terms, $terms_with_args );
     1918                } else {
     1919                        $terms = $terms + $terms_with_args;
     1920                }
    19161921        }
    19171922
    19181923        /**
  • tests/phpunit/tests/admin/includesPost.php

     
    205205        }
    206206
    207207        /**
     208         * @ticket 41293
     209         */
     210        public function test_wp_get_post_terms_should_allow_same_args_with_the_get_terms() {
     211                wp_set_current_user( self::$editor_id );
     212
     213                register_taxonomy( 'wptests_tax', array( 'post' ) );
     214                $t1 = self::factory()->term->create( array(
     215                        'taxonomy' => 'wptests_tax',
     216                        'name' => 'foo',
     217                        'slug' => 'bar',
     218                ) );
     219                $t2 = self::factory()->term->create( array(
     220                        'taxonomy' => 'wptests_tax',
     221                        'name' => 'bar',
     222                        'slug' => 'foo',
     223                ) );
     224
     225                $post_data = array(
     226                        'post_ID' => self::$post_id,
     227                        'tax_input' => array(
     228                                'wptests_tax' => 'foo,baz',
     229                        ),
     230                );
     231
     232                edit_post( $post_data );
     233
     234                $expect = wp_get_post_terms( self::$post_id, 'wptests_tax', array(
     235                        'fields' => 'ids',
     236                ) );
     237
     238                $found1 = array_keys( wp_get_post_terms( self::$post_id, 'wptests_tax', array(
     239                        'fields' => 'id=>parent',
     240                ) ) );
     241
     242                $found2 = array_keys( wp_get_post_terms( self::$post_id, 'wptests_tax', array(
     243                        'fields' => 'id=>slug',
     244                ) ) );
     245
     246                $found3 = array_keys( wp_get_post_terms( self::$post_id, 'wptests_tax', array(
     247                        'fields' => 'id=>name',
     248                ) ) );
     249
     250                $this->assertSame( $expect, $found1 );
     251                $this->assertSame( $expect, $found2 );
     252                $this->assertSame( $expect, $found3 );
     253        }
     254
     255        /**
    208256         * @ticket 27792
    209257         */
    210258        public function test_bulk_edit_posts_stomping() {