WordPress.org

Make WordPress Core

Ticket #10746: wp_count_terms.2.diff

File wp_count_terms.2.diff, 3.8 KB (added by scribu, 4 years ago)

refresh

  • wp-includes/taxonomy.php

     
    748748                $args['hierarchical'] = false; 
    749749                $args['pad_counts'] = false; 
    750750        } 
     751 
    751752        extract($args, EXTR_SKIP); 
    752753 
    753754        if ( $child_of ) { 
     
    871872        } 
    872873 
    873874        $selects = array(); 
    874         if ( 'all' == $fields ) 
    875                 $selects = array('t.*', 'tt.*'); 
    876         else if ( 'ids' == $fields || 'id=>parent' == $fields ) 
    877                 $selects = array('t.term_id', 'tt.parent', 'tt.count'); 
    878         else if ( 'names' == $fields ) 
    879                 $selects = array('t.term_id', 'tt.parent', 'tt.count', 't.name'); 
     875        switch ( $fields ) { 
     876                case 'all': 
     877                        $selects = array('t.*', 'tt.*'); 
     878                        break; 
     879                case 'ids': 
     880                case 'id=>parent': 
     881                        $selects = array('t.term_id', 'tt.parent', 'tt.count'); 
     882                        break; 
     883                case 'names': 
     884                        $selects = array('t.term_id', 'tt.parent', 'tt.count', 't.name'); 
     885                        break; 
     886                case 'count': 
     887                        $selects = array('COUNT(*)'); 
     888        } 
    880889    $select_this = implode(', ', apply_filters( 'get_terms_fields', $selects, $args )); 
    881890 
    882891        $query = "SELECT $select_this FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ($in_taxonomies) $where ORDER BY $orderby $order $limit"; 
    883892 
     893        if ( 'count' == $fields ) { 
     894                $term_count = $wpdb->get_var($query); 
     895                return $term_count; 
     896        } 
     897 
    884898        $terms = $wpdb->get_results($query); 
    885899        if ( 'all' == $fields ) { 
    886900                update_term_cache($terms); 
     
    11301144/** 
    11311145 * Count how many terms are in Taxonomy. 
    11321146 * 
    1133  * Default $args is 'ignore_empty' which can be <code>'ignore_empty=true'</code> 
    1134  * or <code>array('ignore_empty' => true);</code>. 
     1147 * Default $args is 'hide_empty' which can be 'hide_empty=true' or array('hide_empty' => true). 
    11351148 * 
    11361149 * @package WordPress 
    11371150 * @subpackage Taxonomy 
    11381151 * @since 2.3.0 
    11391152 * 
    1140  * @uses $wpdb 
     1153 * @uses get_terms() 
    11411154 * @uses wp_parse_args() Turns strings into arrays and merges defaults into an array. 
    11421155 * 
    11431156 * @param string $taxonomy Taxonomy name 
    1144  * @param array|string $args Overwrite defaults 
     1157 * @param array|string $args Overwrite defaults. See get_terms() 
    11451158 * @return int How many terms are in $taxonomy 
    11461159 */ 
    11471160function wp_count_terms( $taxonomy, $args = array() ) { 
    1148         global $wpdb; 
    1149  
    1150         $defaults = array('ignore_empty' => false); 
     1161        $defaults = array('hide_empty' => false); 
    11511162        $args = wp_parse_args($args, $defaults); 
    1152         extract($args, EXTR_SKIP); 
    11531163 
    1154         $where = ''; 
    1155         if ( $ignore_empty ) 
    1156                 $where = 'AND count > 0'; 
     1164        // backwards compatibility 
     1165        if ( isset($args['ignore_empty']) ) { 
     1166                $args['hide_empty'] = $args['ignore_empty']; 
     1167                unset($args['ignore_empty']); 
     1168        } 
    11571169 
    1158         return $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_taxonomy WHERE taxonomy = %s $where", $taxonomy) ); 
     1170        $args['fields'] = 'count'; 
     1171 
     1172        return get_terms($taxonomy, $args); 
    11591173} 
    11601174 
    11611175/** 
  • wp-admin/edit-tags.php

     
    230230        $tags_per_page = apply_filters( 'edit_' . $taxonomy . '_per_page', $tags_per_page ); 
    231231} 
    232232 
    233 if ( !empty($_GET['s']) ) { 
     233if ( !empty($_GET['s']) ) 
    234234        $searchterms = trim(stripslashes($_GET['s'])); 
    235         $total_terms = count( get_terms( $taxonomy, array( 'search' => $searchterms, 'number' => 0, 'hide_empty' => 0 ) ) ); 
    236 } else { 
     235else 
    237236        $searchterms = ''; 
    238         $total_terms = wp_count_terms($taxonomy); 
    239 } 
    240237 
    241238$page_links = paginate_links( array( 
    242239        'base' => add_query_arg( 'pagenum', '%#%' ), 
    243240        'format' => '', 
    244241        'prev_text' => __('&laquo;'), 
    245242        'next_text' => __('&raquo;'), 
    246         'total' => ceil($total_terms / $tags_per_page), 
     243        'total' => ceil(wp_count_terms($taxonomy, array('search' => $searchterms)) / $tags_per_page), 
    247244        'current' => $pagenum 
    248245)); 
    249246 
     
    409406 
    410407include('admin-footer.php'); 
    411408 
    412 ?> 
    413  No newline at end of file 
     409?>