Make WordPress Core


Ignore:
Timestamp:
05/23/2007 10:32:33 AM (19 years ago)
Author:
ryan
Message:

Add get_term_by() and taxonomy registration bits. Move more category stuff to taxonomy. see #4189

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/category.php

    r5521 r5525  
    88
    99        if ( ! $cat_ids = wp_cache_get('all_category_ids', 'category') ) {
    10                 $cat_ids = $wpdb->get_col("SELECT cat_ID FROM $wpdb->categories");
     10                $cat_ids = get_terms('category', 'get=ids&hierarchical=0&hide_empty=0');
    1111                wp_cache_add('all_category_ids', $cat_ids, 'category');
    1212        }
    … …  
    1616
    1717function &get_categories($args = '') {
    18         global $wpdb, $category_links;
    19        
    20         $defaults = array(
    21                 'type' => 'post', 'child_of' => 0,
    22                 'orderby' => 'name', 'order' => 'ASC',
    23                 'hide_empty' => true, 'include_last_update_time' => false,
    24                 'hierarchical' => 1, 'exclude' => '',
    25                 'include' => '', 'number' => '',
    26                 'pad_counts' => false
    27         );
    28        
    29         $r = wp_parse_args( $args, $defaults );
    30        
    31         if ( $r['orderby'] == 'count' ) {
    32                 $r['orderby'] = 'category_count';
    33         } else {
    34                 $r['orderby'] = 'cat_' . $r['orderby'];
    35         }
    36        
    37         extract( $r );
    38 
    39         $key = md5( serialize( $r ) );
    40         if ( $cache = wp_cache_get( 'get_categories', 'category' ) )
    41                 if ( isset( $cache[ $key ] ) )
    42                         return apply_filters('get_categories', $cache[$key], $r);
    43 
    44         $where = 'cat_ID > 0';
    45         $inclusions = '';
    46         if ( !empty($include) ) {
    47                 $child_of = 0; //ignore child_of and exclude params if using include
    48                 $exclude = '';
    49                 $incategories = preg_split('/[\s,]+/',$include);
    50                 if ( count($incategories) ) {
    51                         foreach ( $incategories as $incat ) {
    52                                 if (empty($inclusions))
    53                                         $inclusions = ' AND ( cat_ID = ' . intval($incat) . ' ';
    54                                 else
    55                                         $inclusions .= ' OR cat_ID = ' . intval($incat) . ' ';
    56                         }
    57                 }
    58         }
    59         if (!empty($inclusions))
    60                 $inclusions .= ')';
    61         $where .= $inclusions;
    62 
    63         $exclusions = '';
    64         if ( !empty($exclude) ) {
    65                 $excategories = preg_split('/[\s,]+/',$exclude);
    66                 if ( count($excategories) ) {
    67                         foreach ( $excategories as $excat ) {
    68                                 if (empty($exclusions))
    69                                         $exclusions = ' AND ( cat_ID <> ' . intval($excat) . ' ';
    70                                 else
    71                                         $exclusions .= ' AND cat_ID <> ' . intval($excat) . ' ';
    72                                 // TODO: Exclude children of excluded cats?   Note: children are getting excluded
    73                         }
    74                 }
    75         }
    76         if (!empty($exclusions))
    77                 $exclusions .= ')';
    78         $exclusions = apply_filters('list_cats_exclusions', $exclusions, $r );
    79         $where .= $exclusions;
    80 
    81         if ( $hide_empty && !$hierarchical ) {
    82                 if ( 'link' == $type )
    83                         $where .= ' AND link_count > 0';
    84                 else
    85                         $where .= ' AND category_count > 0';
    86         } else {
    87                 $where .= ' AND ( type & ' . TAXONOMY_CATEGORY . ' != 0 ) ';
    88         }
    89 
    90        
    91 
    92         if ( !empty($number) )
    93                 $number = 'LIMIT ' . $number;
    94         else
    95                 $number = '';
    96 
    97         $categories = $wpdb->get_results("SELECT * FROM $wpdb->categories WHERE $where ORDER BY $orderby $order $number");
    98 
    99         if ( empty($categories) )
    100                 return array();
    101 
    102         // TODO: Integrate this into the main query.
    103         if ( $include_last_update_time ) {
    104                 $stamps = $wpdb->get_results("SELECT category_id, UNIX_TIMESTAMP( MAX(post_date) ) AS ts FROM $wpdb->posts, $wpdb->post2cat, $wpdb->categories
    105                                                         WHERE post_status = 'publish' AND post_id = ID AND $where GROUP BY category_id");
    106                 global $cat_stamps;
    107                 foreach ($stamps as $stamp)
    108                         $cat_stamps[$stamp->category_id] = $stamp->ts;
    109                 function stamp_cat($cat) {
    110                         global $cat_stamps;
    111                         $cat->last_update_timestamp = $cat_stamps[$cat->cat_ID];
    112                         return $cat;
    113                 }
    114                 $categories = array_map('stamp_cat', $categories);
    115                 unset($cat_stamps);
    116         }
    117 
    118         if ( $child_of || $hierarchical ) {
    119                 $children = _get_category_hierarchy();
    120                 if ( ! empty($children) )
    121                         $categories = & _get_cat_children($child_of, $categories);
    122         }
    123 
    124         // Update category counts to include children.
    125         if ( $pad_counts )
    126                 _pad_category_counts($type, $categories);
    127 
    128         // Make sure we show empty categories that have children.
    129         if ( $hierarchical && $hide_empty ) {
    130                 foreach ( $categories as $k => $category ) {
    131                         if ( ! $category->{'link' == $type ? 'link_count' : 'category_count'} ) {
    132                                 $children = _get_cat_children($category->cat_ID, $categories);
    133                                 foreach ( $children as $child )
    134                                         if ( $child->{'link' == $type ? 'link_count' : 'category_count'} )
    135                                                 continue 2;
    136 
    137                                 // It really is empty
    138                                 unset($categories[$k]);
    139                         }
    140                 }
    141         }
    142         reset ( $categories );
    143 
    144         $cache[ $key ] = $categories;
    145         wp_cache_add( 'get_categories', $cache, 'category' );
    146 
    147         $categories = apply_filters('get_categories', $categories, $r);
    148         return $categories;
     18        // TODO Add back compat fields into each object.
     19        return get_terms('category', $args);
    14920}
    15021
    … …  
    15223// Handles category caching.
    15324function &get_category(&$category, $output = OBJECT) {
    154         global $wpdb;
    155 
    156         if ( empty($category) )
    157                 return null;
    158 
    159         if ( is_object($category) ) {
    160                 wp_cache_add($category->cat_ID, $category, 'category');
    161                 $_category = $category;
    162         } else {
    163                 $category = (int) $category;
    164                 if ( ! $_category = wp_cache_get($category, 'category') ) {
    165                         $_category = $wpdb->get_row("SELECT * FROM $wpdb->categories WHERE cat_ID = '$category' LIMIT 1");
    166                         wp_cache_add($category, $_category, 'category');
    167                 }
    168         }
    169 
    170         $_category = apply_filters('get_category', $_category);
    171 
    172         if ( $output == OBJECT ) {
    173                 return $_category;
    174         } elseif ( $output == ARRAY_A ) {
    175                 return get_object_vars($_category);
    176         } elseif ( $output == ARRAY_N ) {
    177                 return array_values(get_object_vars($_category));
    178         } else {
    179                 return $_category;
    180         }
     25        return get_term($category, 'category', $output);
    18126}
    18227
    … …  
    19338                $full_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title($pathdir);
    19439
    195         $categories = $wpdb->get_results("SELECT cat_ID, category_nicename, category_parent FROM $wpdb->categories WHERE category_nicename = '$leaf_path'");
     40        $categories = get_terms('category', "slug=$leaf_path");
    19641
    19742        if ( empty($categories) )
    … …  
    20146                $path = '/' . $leaf_path;
    20247                $curcategory = $category;
    203                 while ( ($curcategory->category_parent != 0) && ($curcategory->category_parent != $curcategory->cat_ID) ) {
    204                         $curcategory = $wpdb->get_row("SELECT cat_ID, category_nicename, category_parent FROM $wpdb->categories WHERE cat_ID = '$curcategory->category_parent'");
    205                         $path = '/' . $curcategory->category_nicename . $path;
     48                while ( ($curcategory->parent != 0) && ($curcategory->parent != $curcategory->term_id) ) {
     49                        $curcategory = get_term($curcategory->parent);
     50                        $path = '/' . $curcategory->slug . $path;
    20651                }
    20752
    20853                if ( $path == $full_path )
    209                         return get_category($category->cat_ID, $output);
     54                        return get_category($category->term_id, $output);
    21055        }
    21156
    21257        // If full matching is not required, return the first cat that matches the leaf.
    21358        if ( ! $full_match )
    214                 return get_category($categories[0]->cat_ID, $output);
     59                return get_category($categories[0]->term_id, $output);
    21560
    21661        return NULL;
    … …  
    21863
    21964function get_category_by_slug( $slug  ) {
    220         global $wpdb;
    221         $slug = sanitize_title( $slug );
    222         if ( empty( $slug ) )
    223                 return false;
    224         $category = $wpdb->get_var( "SELECT * FROM $wpdb->categories WHERE category_nicename = '$slug' " );
    225         return get_category( $category );
     65        return get_term_by('slug', $slug, 'category');
    22666}
    22767
    … …  
    23070        global $wpdb;
    23171
    232         $cid = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='$cat_name'");
    233 
    234         return $cid?$cid:1;     // default to cat 1
     72        $cat = get_term_by('name', $cat_name, 'category');
     73        if ($cat)
     74                return $cat->term_id;
     75        return 0;
    23576}
    23677
    … …  
    25394                $cat2 = & get_category($cat2);
    25495
    255         if ( !$cat1->cat_ID || !$cat2->category_parent )
     96        if ( !$cat1->term_id || !$cat2->parent )
    25697                return false;
    25798
    258         if ( $cat2->category_parent == $cat1->cat_ID )
     99        if ( $cat2->parent == $cat1->term_id )
    259100                return true;
    260101
    261         return cat_is_ancestor_of($cat1, get_category($cat2->parent_category));
     102        return cat_is_ancestor_of($cat1, get_category($cat2->parent));
    262103}
    263104
Note: See TracChangeset for help on using the changeset viewer.