Make WordPress Core

Ticket #26903: 26903.diff

File 26903.diff, 3.8 KB (added by wonderboymusic, 11 years ago)
  • src/wp-includes/taxonomy.php

     
    12791279        $args['number'] = absint( $args['number'] );
    12801280        $args['offset'] = absint( $args['offset'] );
    12811281        if ( !$single_taxonomy || ! is_taxonomy_hierarchical( reset( $taxonomies ) ) ||
    1282                 '' !== $args['parent'] ) {
     1282                ( '' !== $args['parent'] && 0 !== $args['parent'] ) ) {
    12831283                $args['child_of'] = 0;
    12841284                $args['hierarchical'] = false;
    12851285                $args['pad_counts'] = false;
     
    30023002                        $use_id = true;
    30033003                }
    30043004
    3005                 if ( $term->term_id == $term_id )
     3005                if ( $term->term_id == $term_id ) {
     3006                        if ( isset( $has_children[$term_id] ) ) {
     3007                                foreach ( $has_children[$term_id] as $t_id ) {
     3008                                        if ( $use_id ) {
     3009                                                $term_list[] = $t_id;
     3010                                        } else {
     3011                                                $term_list[] = get_term( $t_id, $taxonomy );
     3012                                        }
     3013                                }
     3014                        }
    30063015                        continue;
     3016                }
    30073017
    30083018                if ( $term->parent == $term_id ) {
    30093019                        if ( $use_id )
     
    35243534/**
    35253535 * Determine if a post's cache for the passed taxonomy
    35263536 *  is in sync.
    3527  * 
     3537 *
    35283538 * @since 3.9.0
    35293539 *
    35303540 * @param int $id
  • tests/phpunit/tests/term/getTerms.php

     
    66class Tests_Term_getTerms extends WP_UnitTestCase {
    77        function setUp() {
    88                parent::setUp();
    9                
     9
    1010                _clean_term_filters();
    1111                wp_cache_delete( 'last_changed', 'terms' );
    1212        }
     
    224224                $terms8 = get_terms( 'post_tag', array( 'hide_empty' => false, 'description__like' => '.', 'fields' => 'ids' ) );
    225225                $this->assertEqualSets( array( $term_id1, $term_id2 ), $terms8 );
    226226        }
     227
     228        function test_get_terms_parent_zero() {
     229                $tax = 'food';
     230                register_taxonomy( $tax, 'post', array( 'hierarchical' => true ) );
     231
     232                $cheese = $this->factory->term->create( array( 'name' => 'Cheese', 'taxonomy' => $tax ) );
     233
     234                $cheddar = $this->factory->term->create( array( 'name' => 'Cheddar', 'parent' => $cheese, 'taxonomy' => $tax ) );
     235
     236                $post_ids = $this->factory->post->create_many( 2 );
     237                foreach ( $post_ids as $id ) {
     238                        wp_set_post_terms( $id, $cheddar, $tax );
     239                }
     240                $term = get_term( $cheddar, $tax );
     241                $this->assertEquals( 2, $term->count );
     242
     243                $brie = $this->factory->term->create( array( 'name' => 'Brie', 'parent' => $cheese, 'taxonomy' => $tax ) );
     244                $post_ids = $this->factory->post->create_many( 7 );
     245                foreach ( $post_ids as $id ) {
     246                        wp_set_post_terms( $id, $brie, $tax );
     247                }
     248                $term = get_term( $brie, $tax );
     249                $this->assertEquals( 7, $term->count );
     250
     251                $crackers = $this->factory->term->create( array( 'name' => 'Crackers', 'taxonomy' => $tax ) );
     252
     253                $butter = $this->factory->term->create( array( 'name' => 'Butter', 'parent' => $crackers, 'taxonomy' => $tax ) );
     254                $post_ids = $this->factory->post->create_many( 1 );
     255                foreach ( $post_ids as $id ) {
     256                        wp_set_post_terms( $id, $butter, $tax );
     257                }
     258                $term = get_term( $butter, $tax );
     259                $this->assertEquals( 1, $term->count );
     260
     261                $multigrain = $this->factory->term->create( array( 'name' => 'Multigrain', 'parent' => $crackers, 'taxonomy' => $tax ) );
     262                $post_ids = $this->factory->post->create_many( 3 );
     263                foreach ( $post_ids as $id ) {
     264                        wp_set_post_terms( $id, $multigrain, $tax );
     265                }
     266                $term = get_term( $multigrain, $tax );
     267                $this->assertEquals( 3, $term->count );
     268
     269                $fruit = $this->factory->term->create( array( 'name' => 'Fruit', 'taxonomy' => $tax ) );
     270                $cranberries = $this->factory->term->create( array( 'name' => 'Cranberries', 'parent' => $fruit, 'taxonomy' => $tax ) );
     271
     272                $terms = get_terms( $tax, array( 'parent' => 0, 'cache_domain' => $tax ) );
     273                $this->assertNotEmpty( $terms );
     274                $this->assertEquals( wp_list_pluck( $terms, 'name' ), array( 'Cheese', 'Crackers' ) );
     275        }
    227276}