WordPress.org

Make WordPress Core

Ticket #17689: 17689.6.diff

File 17689.6.diff, 2.1 KB (added by wonderboymusic, 6 years ago)
  • src/wp-includes/taxonomy.php

     
    21352135        $name = wp_unslash($name);
    21362136        $description = wp_unslash($description);
    21372137
    2138         if ( empty($slug) )
    2139                 $slug = sanitize_title($name);
     2138        if ( empty( $slug ) ) {
     2139                $_name = trim( $name );
     2140                $existing_term = get_term_by( 'name', $_name, $taxonomy );
     2141                if ( $existing_term )
     2142                        $slug = $existing_term->slug;
     2143                else
     2144                        $slug = sanitize_title( $name );
     2145        }
    21402146
    21412147        $term_group = 0;
    21422148        if ( $alias_of ) {
  • tests/phpunit/tests/taxonomy.php

     
    168168                wp_set_object_terms( $post->ID, $term['term_id'], 'category' );
    169169                $this->assertTrue( in_category( $term['term_id'], $post ) );
    170170        }
     171
     172        function test_duplicate_name() {
     173                $term = $this->factory->tag->create( array( 'name' => 'Bozo' ) );
     174                $this->assertFalse( is_wp_error( $term ) );
     175                $this->assertEmpty( $term->errors );
     176
     177                $term1 = $this->factory->tag->create( array( 'name' => 'Bozo', 'slug' => 'bozo1' ) );
     178                $this->assertFalse( is_wp_error( $term1 ) );
     179                $this->assertEmpty( $term1->errors );
     180
     181                $term2 = $this->factory->tag->create( array( 'name' => 'Bozo' ) );
     182                $this->assertTrue( is_wp_error( $term2 ) );
     183                $this->assertNotEmpty( $term2->errors );
     184
     185                $term3 = $this->factory->tag->create( array( 'name' => 'A+' ) );
     186                $term4 = $this->factory->tag->create( array( 'name' => 'A++' ) );
     187                $term5 = $this->factory->tag->create( array( 'name' => 'A+++' ) );
     188                $term6 = $this->factory->tag->create( array( 'name' => 'A++++' ) );
     189                $term7 = $this->factory->tag->create( array( 'name' => 'A++++' ) );
     190                $this->assertTrue( is_wp_error( $term7 ) );
     191                $this->assertNotEmpty( $term7->errors );
     192
     193                $terms = array_map( 'get_tag', array( $term3, $term4, $term5, $term6 ) );
     194                $this->assertCount( 4, array_unique( wp_list_pluck( $terms, 'slug' ) ) );
     195        }
    171196}