WordPress.org

Make WordPress Core

Ticket #10746: wp_count_terms.2.diff

File wp_count_terms.2.diff, 3.8 KB (added by scribu, 8 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?>