WordPress.org

Make WordPress Core

Ticket #11076: get_terms.3.diff

File get_terms.3.diff, 4.6 KB (added by scribu, 5 years ago)

Use helper function

  • wp-includes/taxonomy.php

     
    545545 * hide_empty - Default is true. Will not return empty terms, which means 
    546546 * terms whose count is 0 according to the given taxonomy. 
    547547 * 
    548  * exclude - Default is an empty string.  A comma- or space-delimited string 
     548 * exclude - Default is an empty array.  An array, comma- or space-delimited string 
    549549 * of term ids to exclude from the return array.  If 'include' is non-empty, 
    550550 * 'exclude' is ignored. 
    551551 * 
    552  * exclude_tree - A comma- or space-delimited string of term ids to exclude 
    553  * from the return array, along with all of their descendant terms according to 
    554  * the primary taxonomy.  If 'include' is non-empty, 'exclude_tree' is ignored. 
     552 * exclude_tree - Default is an empty array.  An array, comma- or space-delimited  
     553 * string of term ids to exclude from the return array, along with all of their  
     554 * descendant terms according to the primary taxonomy.  If 'include' is non-empty,  
     555 * 'exclude_tree' is ignored. 
    555556 * 
    556  * include - Default is an empty string.  A comma- or space-delimited string 
     557 * include - Default is an empty array.  An array, comma- or space-delimited string 
    557558 * of term ids to include in the return array. 
    558559 * 
    559  * number - The maximum number of terms to return.  Default is empty. 
     560 * number - The maximum number of terms to return.  Default is empty string. 
    560561 * 
    561562 * offset - The number by which to offset the terms query. 
    562563 * 
     
    625626        $in_taxonomies = "'" . implode("', '", $taxonomies) . "'"; 
    626627 
    627628        $defaults = array('orderby' => 'name', 'order' => 'ASC', 
    628                 'hide_empty' => true, 'exclude' => '', 'exclude_tree' => '', 'include' => '', 
     629                'hide_empty' => true, 'exclude' => array(), 'exclude_tree' => array(), 'include' => array(), 
    629630                'number' => '', 'fields' => 'all', 'slug' => '', 'parent' => '', 
    630631                'hierarchical' => true, 'child_of' => 0, 'get' => '', 'name__like' => '', 
    631632                'pad_counts' => false, 'offset' => '', 'search' => ''); 
     
    693694        if ( !empty($include) ) { 
    694695                $exclude = ''; 
    695696                $exclude_tree = ''; 
    696                 $interms = preg_split('/[\s,]+/',$include); 
    697                 if ( count($interms) ) { 
    698                         foreach ( (array) $interms as $interm ) { 
    699                                 if (empty($inclusions)) 
    700                                         $inclusions = ' AND ( t.term_id = ' . intval($interm) . ' '; 
    701                                 else 
    702                                         $inclusions .= ' OR t.term_id = ' . intval($interm) . ' '; 
    703                         } 
     697                $interms = _parse_get_terms_arg($include); 
     698                foreach ( $interms as $interm ) { 
     699                        if ( empty($inclusions) ) 
     700                                $inclusions = ' AND ( t.term_id = ' . intval($interm) . ' '; 
     701                        else 
     702                                $inclusions .= ' OR t.term_id = ' . intval($interm) . ' '; 
    704703                } 
    705704        } 
    706705 
     
    709708        $where .= $inclusions; 
    710709 
    711710        $exclusions = ''; 
    712         if ( ! empty( $exclude_tree ) ) { 
    713                 $excluded_trunks = preg_split('/[\s,]+/',$exclude_tree); 
    714                 foreach( (array) $excluded_trunks as $extrunk ) { 
     711        if ( !empty( $exclude_tree ) ) { 
     712                $excluded_trunks = _parse_get_terms_arg($exclude_tree); 
     713                foreach ( $excluded_trunks as $extrunk ) { 
    715714                        $excluded_children = (array) get_terms($taxonomies[0], array('child_of' => intval($extrunk), 'fields' => 'ids')); 
    716715                        $excluded_children[] = $extrunk; 
    717                         foreach( (array) $excluded_children as $exterm ) { 
     716                        foreach( $excluded_children as $exterm ) { 
    718717                                if ( empty($exclusions) ) 
    719718                                        $exclusions = ' AND ( t.term_id <> ' . intval($exterm) . ' '; 
    720719                                else 
    721720                                        $exclusions .= ' AND t.term_id <> ' . intval($exterm) . ' '; 
    722  
    723721                        } 
    724722                } 
    725723        } 
     724 
    726725        if ( !empty($exclude) ) { 
    727                 $exterms = preg_split('/[\s,]+/',$exclude); 
    728                 if ( count($exterms) ) { 
    729                         foreach ( (array) $exterms as $exterm ) { 
    730                                 if ( empty($exclusions) ) 
    731                                         $exclusions = ' AND ( t.term_id <> ' . intval($exterm) . ' '; 
    732                                 else 
    733                                         $exclusions .= ' AND t.term_id <> ' . intval($exterm) . ' '; 
    734                         } 
     726                $exterms = _parse_get_terms_arg($exclude); 
     727                foreach ( $exterms as $exterm ) { 
     728                        if ( empty($exclusions) ) 
     729                                $exclusions = ' AND ( t.term_id <> ' . intval($exterm) . ' '; 
     730                        else 
     731                                $exclusions .= ' AND t.term_id <> ' . intval($exterm) . ' '; 
    735732                } 
    736733        } 
    737734 
     
    808805                foreach ( $terms as $k => $term ) { 
    809806                        if ( ! $term->count ) { 
    810807                                $children = _get_term_children($term->term_id, $terms, $taxonomies[0]); 
    811                                 if( is_array($children) ) 
     808                                if ( is_array($children) ) 
    812809                                        foreach ( $children as $child ) 
    813810                                                if ( $child->count ) 
    814811                                                        continue 2; 
     
    841838        return $terms; 
    842839} 
    843840 
     841function _parse_get_terms_arg($arg) { 
     842        if ( is_array($arg) ) 
     843                return array_unique($arg); 
     844 
     845        return array_unique(preg_split('/[\s,]+/', $arg)); 
     846} 
     847 
    844848/** 
    845849 * Check if Term exists. 
    846850 *