ID; if ( !isset($category_cache[$id]) ) update_post_category_cache($id); $categories = $category_cache[$id]; if ( !empty($categories) ) sort($categories); else $categories = array(); return $categories; } function get_category_link($category_id) { global $wp_rewrite; $catlink = $wp_rewrite->get_category_permastruct(); if ( empty($catlink) ) { $file = get_settings('home') . '/'; $catlink = $file . '?cat=' . $category_id; } else { $category = &get_category($category_id); $category_nicename = $category->category_nicename; if ( $parent = $category->category_parent ) $category_nicename = get_category_parents($parent, false, '/', true) . $category_nicename . '/'; $catlink = str_replace('%category%', $category_nicename, $catlink); $catlink = get_settings('home') . trailingslashit($catlink); } return apply_filters('category_link', $catlink, $category_id); } function get_the_category_list($separator = '', $parents='') { $categories = get_the_category(); if (empty($categories)) return apply_filters('the_category', __('Uncategorized'), $separator, $parents); $thelist = ''; if ( '' == $separator ) { $thelist .= ''; } else { $i = 0; foreach ( $categories as $category ) { if ( 0 < $i ) $thelist .= $separator . ' '; switch ( strtolower($parents) ) { case 'multiple': if ( $category->category_parent ) $thelist .= get_category_parents($category->category_parent, TRUE); $thelist .= 'cat_name) . '" rel="category tag">'.$category->cat_name.''; break; case 'single': $thelist .= 'cat_name) . '" rel="category tag">'; if ( $category->category_parent ) $thelist .= get_category_parents($category->category_parent, FALSE); $thelist .= "$category->cat_name"; break; case '': default: $thelist .= 'cat_name) . '" rel="category tag">'.$category->cat_name.''; } ++$i; } } return apply_filters('the_category', $thelist, $separator, $parents); } function the_category($separator = '', $parents='') { echo get_the_category_list($separator, $parents); } function get_the_category_by_ID($cat_ID) { $cat_ID = (int) $cat_ID; $category = &get_category($cat_ID); return $category->cat_name; } function get_category_parents($id, $link = FALSE, $separator = '/', $nicename = FALSE){ $chain = ''; $parent = &get_category($id); if ( $nicename ) $name = $parent->category_nicename; else $name = $parent->cat_name; if ( $parent->category_parent ) $chain .= get_category_parents($parent->category_parent, $link, $separator, $nicename); if ( $link ) $chain .= 'cat_name) . '">'.$name.'' . $separator; else $chain .= $name.$separator; return $chain; } function get_category_children($id, $before = '/', $after = '') { if ( 0 == $id ) return ''; $cat_ids = get_all_category_ids(); foreach ( $cat_ids as $cat_id ) { if ( $cat_id == $id) continue; $category = get_category($cat_id); if ( $category->category_parent == $id ) { $chain .= $before.$category->cat_ID.$after; $chain .= get_category_children($category->cat_ID, $before, $after); } } return $chain; } function category_description($category = 0) { global $cat; if ( !$category ) $category = $cat; $category = & get_category($category); return apply_filters('category_description', $category->category_description, $category->cat_ID); } function wp_dropdown_categories($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('show_option_all' => '', 'show_option_none' => '', 'orderby' => 'ID', 'order' => 'ASC', 'show_last_update' => 0, 'show_count' => 0, 'hide_empty' => 1, 'child_of' => 0, 'exclude' => '', 'echo' => 1, 'selected' => 0, 'hierarchical' => 0, 'name' => 'cat', 'class' => 'postform'); $r = array_merge($defaults, $r); $r['include_last_update_time'] = $r['show_last_update']; extract($r); $categories = get_categories($r); $output = ''; if ( ! empty($categories) ) { $output = "\n"; } $output = apply_filters('wp_dropdown_cats', $output); if ( $echo ) echo $output; return $output; } function _category_dropdown_element($output, $category, $depth, $selected, $args) { $pad = str_repeat(' ', $depth * 3); $cat_name = apply_filters('list_cats', $category->cat_name, $category); $output .= "\t\n"; return $output; } function wp_list_categories($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('show_option_all' => '', 'orderby' => 'ID', 'order' => 'asc', 'style' => 'list', 'show_last_update' => 0, 'show_count' => 0, 'hide_empty' => 1, 'use_desc_for_title' => 1, 'child_of' => 0, 'feed' => '', 'feed_image' => '', 'exclude' => '', 'hierarchical' => false, 'title_li' => ''); $r = array_merge($defaults, $r); $r['include_last_update_time'] = $r['show_date']; extract($r); $categories = get_categories($r); $output = ''; if ( $title_li && $list ) $output = '
  • ' . $r['title_li'] . '
  • '; echo apply_filters('list_cats', $output); } function _category_list_level_start($output, $depth, $cat, $args) { if ( 'list' != $args['style'] ) return $output; $indent = str_repeat("\t", $depth); $output .= "$indent\n"; return $output; } function _category_list_element_start($output, $category, $depth, $current_category, $args) { extract($args); $link = 'category_description) ) $link .= 'title="'. sprintf(__("View all posts filed under %s"), wp_specialchars($category->cat_name)) . '"'; else $link .= 'title="' . wp_specialchars(apply_filters('category_description',$category->category_description,$category)) . '"'; $link .= '>'; $link .= apply_filters('list_cats', $category->cat_name, $category).''; if ( (! empty($feed_image)) || (! empty($feed)) ) { $link .= ' '; if ( empty($feed_image) ) $link .= '('; $link .= ''; else $link .= $name; $link .= ''; if (empty($feed_image)) $link .= ')'; } if ( $show_count ) $link .= ' ('.intval($category->category_count).')'; if ( $show_date ) { $link .= ' ' . gmdate('Y-m-d', $category->last_update_timestamp); } if ( 'list' == $args['style'] ) { $output .= "\tcat_ID == $current_category) && is_category() ) $output .= ' class="current-cat"'; $output .= ">$link\n"; } else { $output .= "\t$link
    \n"; } return $output; } function _category_list_element_end($output, $category, $depth, $cat, $args) { if ( 'list' != $args['style'] ) return $output; $output .= "\n"; return $output; } function in_category($category) { // Check if the current post is in the given category global $category_cache, $post; if ( isset( $category_cache[$post->ID][$category] ) ) return true; else return false; } function &_get_cat_children($category_id, $categories) { if ( empty($categories) ) return array(); $category_list = array(); foreach ( $categories as $category ) { if ( $category->category_parent == $category_id ) { $category_list[] = $category; if ( $children = _get_cat_children($category->cat_ID, $categories) ) $category_list = array_merge($category_list, $children); } } return $category_list; } function &get_categories($args = '') { global $wpdb, $category_links; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('type' => 'post', 'child_of' => 0, 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => true, 'include_last_update_time' => false, 'hierarchical' => 1); $r = array_merge($defaults, $r); $r['orderby'] = "cat_" . $r['orderby']; extract($r); $exclusions = ''; $having = ''; $where = 'cat_ID > 0'; $exclusions = ''; if ( !empty($exclude) ) { $excategories = preg_split('/[\s,]+/',$exclude); if ( count($excategories) ) { foreach ( $excategories as $excat ) { $exclusions .= ' AND cat_ID <> ' . intval($excat) . ' '; // TODO: Exclude children of excluded cats? } } } $exclusions = apply_filters('list_cats_exclusions', $exclusions ); $where .= $exclusions; if ( $hide_empty ) { if ( 'link' == $type ) $having = 'HAVING link_count > 0'; else $having = 'HAVING category_count > 0'; } $categories = $wpdb->get_results("SELECT * FROM $wpdb->categories WHERE $where $having ORDER BY $orderby $order"); if ( empty($categories) ) return array(); // TODO: Integrate this into the main query. if ( $include_last_update_time ) { $stamps = $wpdb->get_results("SELECT category_id, UNIX_TIMESTAMP( MAX(post_date) ) AS ts FROM $wpdb->posts, $wpdb->post2cat, $wpdb->categories WHERE post_status = 'publish' AND post_id = ID AND $where GROUP BY category_id"); global $cat_stamps; foreach ($stamps as $stamp) $cat_stamps[$stamp->category_id] = $stamp->ts; function stamp_cat($cat) { global $cat_stamps; $cat->last_update_timestamp = $cat_stamps[$cat->cat_ID]; return $cat; } $categories = array_map('stamp_cat', $categories); unset($cat_stamps); } if ( $child_of || $hierarchical ) $categories = & _get_cat_children($child_of, $categories); return $categories; } ?>