WordPress.org

Make WordPress Core

Ticket #10746: wp_count_terms.diff

File wp_count_terms.diff, 3.3 KB (added by scribu, 5 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