WordPress.org

Make WordPress Core

Ticket #10746: wp_count_terms.diff

File wp_count_terms.diff, 3.3 KB (added by scribu, 9 years ago)
  • wp-includes/taxonomy.php

     
    642642                $args['hierarchical'] = false;
    643643                $args['pad_counts'] = false;
    644644        }
     645
    645646        extract($args, EXTR_SKIP);
    646647
    647648        if ( $child_of ) {
     
    769770        }
    770771
    771772        $selects = array();
    772         if ( 'all' == $fields )
    773                 $selects = array('t.*', 'tt.*');
    774         else if ( 'ids' == $fields )
    775                 $selects = array('t.term_id', 'tt.parent', 'tt.count');
    776         else if ( 'names' == $fields )
    777                 $selects = array('t.term_id', 'tt.parent', 'tt.count', 't.name');
    778         $select_this = implode(', ', apply_filters( 'get_terms_fields', $selects, $args ));
     773        switch ( $fields ) {
     774                case 'all':
     775                        $selects = array('t.*', 'tt.*');
     776                        break;
     777                case 'ids':
     778                        $selects = array('t.term_id', 'tt.parent', 'tt.count');
     779                        break;
     780                case 'names':
     781                        $selects = array('t.term_id', 'tt.parent', 'tt.count', 't.name');
     782                        break;
     783                case 'count':
     784                        $selects = array('COUNT(*)');
     785        }
     786        $select_this = implode(', ', apply_filters( 'get_terms_fields', $selects, $args ));
    779787
    780788        $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";
    781789
     790        if ( 'count' == $fields )
     791                return $wpdb->get_var($query);
     792
    782793        $terms = $wpdb->get_results($query);
    783794        if ( 'all' == $fields ) {
    784795                update_term_cache($terms);
     
    10241035/**
    10251036 * Count how many terms are in Taxonomy.
    10261037 *
    1027  * Default $args is 'ignore_empty' which can be <code>'ignore_empty=true'</code>
    1028  * or <code>array('ignore_empty' => true);</code>.
     1038 * Default $args is 'hide_empty' which can be 'hide_empty=true' or array('hide_empty' => true).
    10291039 *
    10301040 * @package WordPress
    10311041 * @subpackage Taxonomy
    10321042 * @since 2.3.0
    10331043 *
    1034  * @uses $wpdb
     1044 * @uses get_terms()
    10351045 * @uses wp_parse_args() Turns strings into arrays and merges defaults into an array.
    10361046 *
    10371047 * @param string $taxonomy Taxonomy name
    1038  * @param array|string $args Overwrite defaults
     1048 * @param array|string $args Overwrite defaults. See get_terms()
    10391049 * @return int How many terms are in $taxonomy
    10401050 */
    10411051function wp_count_terms( $taxonomy, $args = array() ) {
    1042         global $wpdb;
    1043 
    1044         $defaults = array('ignore_empty' => false);
     1052        $defaults = array('hide_empty' => false);
    10451053        $args = wp_parse_args($args, $defaults);
    1046         extract($args, EXTR_SKIP);
    10471054
    1048         $where = '';
    1049         if ( $ignore_empty )
    1050                 $where = 'AND count > 0';
     1055        // backwards compatibility
     1056        if ( isset($args['ignore_empty']) ) {
     1057                $args['hide_empty'] = $args['ignore_empty'];
     1058                unset($args['ignore_empty']);
     1059        }
    10511060
    1052         return $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_taxonomy WHERE taxonomy = %s $where", $taxonomy) );
     1061        $args['fields'] = 'count';
     1062
     1063        return get_terms($taxonomy, $args);
    10531064}
    10541065
    10551066/**
  • wp-admin/edit-tags.php

     
    190190        'format' => '',
    191191        'prev_text' => __('&laquo;'),
    192192        'next_text' => __('&raquo;'),
    193         'total' => ceil(wp_count_terms($taxonomy) / $tags_per_page),
     193        'total' => ceil(wp_count_terms($taxonomy, array('search' => $_GET['s'])) / $tags_per_page),
    194194        'current' => $pagenum
    195195));
    196196