WordPress.org

Make WordPress Core

Ticket #11076: get_terms.3.diff

File get_terms.3.diff, 4.6 KB (added by scribu, 8 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 *