WordPress.org

Make WordPress Core

Ticket #27123: 27123.2.patch

File 27123.2.patch, 3.4 KB (added by SergeyBiryukov, 4 years ago)
  • src/wp-includes/taxonomy.php

     
    10701070 *
    10711071 * @param string $term_id ID of Term to get children
    10721072 * @param string $taxonomy Taxonomy Name
    1073  * @return array|WP_Error List of Term Objects. WP_Error returned if $taxonomy does not exist
     1073 * @return array|WP_Error List of Term IDs. WP_Error returned if $taxonomy does not exist
    10741074 */
    10751075function get_term_children( $term_id, $taxonomy ) {
    10761076        if ( ! taxonomy_exists($taxonomy) )
     
    15031503        if ( $hierarchical && $hide_empty && is_array( $terms ) ) {
    15041504                foreach ( $terms as $k => $term ) {
    15051505                        if ( ! $term->count ) {
    1506                                 $children = _get_term_children( $term->term_id, $terms, reset( $taxonomies ) );
    1507                                 if ( is_array( $children ) )
    1508                                         foreach ( $children as $child )
    1509                                                 if ( $child->count )
     1506                                $children = get_term_children( $term->term_id, reset( $taxonomies ) );
     1507                                if ( is_array( $children ) ) {
     1508                                        foreach ( $children as $child_id ) {
     1509                                                $child = get_term( $child_id, reset( $taxonomies ) );
     1510                                                if ( $child->count ) {
    15101511                                                        continue 2;
     1512                                                }
     1513                                        }
     1514                                }
    15111515
    15121516                                // It really is empty
    15131517                                unset($terms[$k]);
     
    29882992                }
    29892993
    29902994                if ( $term->term_id == $term_id ) {
    2991                         if ( isset( $has_children[$term_id] ) ) {
    2992                                 $current_id = $term_id;
    2993                                 while ( $current_id > 0 ) {
    2994                                         foreach ( $has_children[$current_id] as $t_id ) {
    2995                                                 if ( $use_id ) {
    2996                                                         $term_list[] = $t_id;
    2997                                                 } else {
    2998                                                         $term_list[] = get_term( $t_id, $taxonomy );
    2999                                                 }
    3000                                         }
    3001 
    3002                                         $current_id = isset( $has_children[$t_id] ) ? $t_id : 0;
    3003                                 }
    3004                         }
    30052995                        continue;
    30062996                }
    30072997
  • tests/phpunit/tests/term/getTerms.php

     
    276276                $cranberries = $this->factory->term->create( array( 'name' => 'Cranberries', 'parent' => $fruit, 'taxonomy' => $tax ) );
    277277
    278278                $terms = get_terms( $tax, array( 'parent' => 0, 'cache_domain' => $tax ) );
    279                 $this->assertNotEmpty( $terms );
     279                $this->assertEquals( 2, count( $terms ) );
    280280                $this->assertEquals( wp_list_pluck( $terms, 'name' ), array( 'Cheese', 'Crackers' ) );
    281281        }
    282282
     
    296296                $this->assertEquals( 1, $term->count );
    297297
    298298                $terms = get_terms( $tax, array( 'parent' => 0, 'cache_domain' => $tax ) );
    299                 $this->assertNotEmpty( $terms );
     299                $this->assertEquals( 1, count( $terms ) );
    300300                $this->assertEquals( array( 'Cheese' ), wp_list_pluck( $terms, 'name' ) );
    301301
    302302                _unregister_taxonomy( $tax );
     
    320320                $this->assertEquals( 1, $term->count );
    321321
    322322                $terms = get_terms( $tax, array( 'parent' => 0, 'cache_domain' => $tax ) );
    323                 $this->assertNotEmpty( $terms );
     323                $this->assertEquals( 1, count( $terms ) );
    324324                $this->assertEquals( array( 'term1' ), wp_list_pluck( $terms, 'name' ) );
    325325
    326326                _unregister_taxonomy( $tax );
    327327        }
     328
     329        /**
     330         * @ticket 27123
     331         */
     332        function test_get_terms_child_of() {
     333                $parent = $this->factory->category->create();
     334                $child = $this->factory->category->create( array( 'parent' => $parent ) );
     335
     336                $term_ids = array( $parent, $child );
     337                clean_term_cache( $term_ids, 'category' );
     338
     339                $terms = get_terms( 'category', array( 'child_of' => $parent, 'hide_empty' => false ) );
     340                $this->assertEquals( 1, count( $terms ) );
     341        }
    328342}