2004-01-27 04:58:01 -05:00
< ? php
2006-06-04 17:36:52 -04:00
function get_category_children ( $id , $before = '/' , $after = '' ) {
if ( 0 == $id )
return '' ;
2006-10-03 11:41:44 -04:00
$chain = '' ;
2007-05-23 14:59:12 -04:00
// TODO: consult hierarchy
2006-06-04 17:36:52 -04:00
$cat_ids = get_all_category_ids ();
foreach ( $cat_ids as $cat_id ) {
2007-05-23 14:59:12 -04:00
if ( $cat_id == $id )
2006-06-04 17:36:52 -04:00
continue ;
$category = get_category ( $cat_id );
2007-05-23 14:07:53 -04:00
if ( $category -> parent == $id ) {
$chain .= $before . $category -> term_id . $after ;
$chain .= get_category_children ( $category -> term_id , $before , $after );
2006-06-04 17:36:52 -04:00
}
}
return $chain ;
2006-04-13 00:40:48 -04:00
}
2006-06-04 17:36:52 -04:00
function get_category_link ( $category_id ) {
global $wp_rewrite ;
$catlink = $wp_rewrite -> get_category_permastruct ();
if ( empty ( $catlink ) ) {
2006-08-30 17:46:31 -04:00
$file = get_option ( 'home' ) . '/' ;
2006-06-04 17:36:52 -04:00
$catlink = $file . '?cat=' . $category_id ;
} else {
$category = & get_category ( $category_id );
2007-05-23 14:07:53 -04:00
$category_nicename = $category -> slug ;
2006-06-04 17:36:52 -04:00
2007-05-23 14:07:53 -04:00
if ( $parent = $category -> parent )
2007-02-15 02:07:12 -05:00
$category_nicename = get_category_parents ( $parent , false , '/' , true ) . $category_nicename ;
2006-06-04 17:36:52 -04:00
$catlink = str_replace ( '%category%' , $category_nicename , $catlink );
2007-03-10 01:18:43 -05:00
$catlink = get_option ( 'home' ) . user_trailingslashit ( $catlink , 'category' );
2006-06-04 17:36:52 -04:00
}
return apply_filters ( 'category_link' , $catlink , $category_id );
}
function get_category_parents ( $id , $link = FALSE , $separator = '/' , $nicename = FALSE ){
$chain = '' ;
$parent = & get_category ( $id );
if ( $nicename )
2007-05-23 14:07:53 -04:00
$name = $parent -> slug ;
2006-06-04 17:36:52 -04:00
else
$name = $parent -> cat_name ;
2007-05-23 14:07:53 -04:00
if ( $parent -> parent && ( $parent -> parent != $parent -> term_id ) )
$chain .= get_category_parents ( $parent -> parent , $link , $separator , $nicename );
2006-06-04 17:36:52 -04:00
if ( $link )
2007-05-23 14:07:53 -04:00
$chain .= '<a href="' . get_category_link ( $parent -> term_id ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $parent -> cat_name ) . '">' . $name . '</a>' . $separator ;
2006-06-04 17:36:52 -04:00
else
$chain .= $name . $separator ;
return $chain ;
2006-04-13 00:40:48 -04:00
}
2004-06-03 22:36:46 -04:00
function get_the_category ( $id = false ) {
2007-05-29 23:36:59 -04:00
global $post , $term_cache , $blog_id ;
2004-06-03 22:36:46 -04:00
2007-03-22 16:52:29 -04:00
$id = ( int ) $id ;
2005-03-01 04:10:12 -05:00
if ( ! $id )
2007-03-22 22:16:16 -04:00
$id = ( int ) $post -> ID ;
2004-06-03 22:36:46 -04:00
2007-05-31 17:38:33 -04:00
$categories = get_object_term_cache ( $id , 'category' );
2007-05-29 23:36:59 -04:00
if ( false === $categories )
2007-06-18 20:33:44 -04:00
$categories = wp_get_object_terms ( $id , 'category' );
2004-11-12 18:08:51 -05:00
2005-10-12 13:01:50 -04:00
if ( ! empty ( $categories ) )
2007-05-29 00:54:45 -04:00
usort ( $categories , '_usort_terms_by_name' );
2005-03-01 04:10:12 -05:00
else
$categories = array ();
2004-11-15 01:00:21 -05:00
2005-03-01 04:10:12 -05:00
return $categories ;
2004-01-27 04:58:01 -05:00
}
2007-05-29 00:54:45 -04:00
function _usort_terms_by_name ( $a , $b ) {
return strcmp ( $a -> name , $b -> name );
}
function _usort_terms_by_ID ( $a , $b ) {
if ( $a -> term_id > $b -> term_id )
return 1 ;
elseif ( $a -> term_id < $b -> term_id )
return - 1 ;
else
return 0 ;
2007-02-20 21:13:47 -05:00
}
2006-06-04 17:36:52 -04:00
function get_the_category_by_ID ( $cat_ID ) {
$cat_ID = ( int ) $cat_ID ;
$category = & get_category ( $cat_ID );
2007-05-23 14:07:53 -04:00
return $category -> name ;
2004-01-27 04:58:01 -05:00
}
2005-02-25 10:50:55 -05:00
function get_the_category_list ( $separator = '' , $parents = '' ) {
2007-01-23 03:21:28 -05:00
global $wp_rewrite ;
2005-10-12 13:01:50 -04:00
$categories = get_the_category ();
if ( empty ( $categories ))
return apply_filters ( 'the_category' , __ ( 'Uncategorized' ), $separator , $parents );
2007-01-23 03:21:28 -05:00
$rel = ( is_object ( $wp_rewrite ) && $wp_rewrite -> using_permalinks () ) ? 'rel="category tag"' : 'rel="category"' ;
2005-10-12 13:01:50 -04:00
$thelist = '' ;
if ( '' == $separator ) {
$thelist .= '<ul class="post-categories">' ;
foreach ( $categories as $category ) {
$thelist .= " \n \t <li> " ;
switch ( strtolower ( $parents ) ) {
case 'multiple' :
2007-05-23 14:07:53 -04:00
if ( $category -> parent )
$thelist .= get_category_parents ( $category -> parent , TRUE );
$thelist .= '<a href="' . get_category_link ( $category -> term_id ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> name ) . '" ' . $rel . '>' . $category -> name . '</a></li>' ;
2005-10-12 13:01:50 -04:00
break ;
case 'single' :
2007-05-23 14:07:53 -04:00
$thelist .= '<a href="' . get_category_link ( $category -> term_id ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> name ) . '" ' . $rel . '>' ;
if ( $category -> parent )
$thelist .= get_category_parents ( $category -> parent , FALSE );
$thelist .= $category -> name . '</a></li>' ;
2005-10-12 13:01:50 -04:00
break ;
case '' :
default :
2007-05-23 14:07:53 -04:00
$thelist .= '<a href="' . get_category_link ( $category -> term_id ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> name ) . '" ' . $rel . '>' . $category -> cat_name . '</a></li>' ;
2005-10-12 13:01:50 -04:00
}
}
$thelist .= '</ul>' ;
} else {
$i = 0 ;
foreach ( $categories as $category ) {
if ( 0 < $i )
$thelist .= $separator . ' ' ;
switch ( strtolower ( $parents ) ) {
case 'multiple' :
2007-05-23 14:07:53 -04:00
if ( $category -> parent )
$thelist .= get_category_parents ( $category -> parent , TRUE );
$thelist .= '<a href="' . get_category_link ( $category -> term_id ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> name ) . '" ' . $rel . '>' . $category -> cat_name . '</a>' ;
2005-10-12 13:01:50 -04:00
break ;
case 'single' :
2007-05-23 14:07:53 -04:00
$thelist .= '<a href="' . get_category_link ( $category -> term_id ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> name ) . '" ' . $rel . '>' ;
if ( $category -> parent )
$thelist .= get_category_parents ( $category -> parent , FALSE );
2005-10-12 13:01:50 -04:00
$thelist .= " $category->cat_name </a> " ;
break ;
case '' :
default :
2007-05-23 14:07:53 -04:00
$thelist .= '<a href="' . get_category_link ( $category -> term_id ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> name ) . '" ' . $rel . '>' . $category -> name . '</a>' ;
2005-10-12 13:01:50 -04:00
}
++ $i ;
}
}
return apply_filters ( 'the_category' , $thelist , $separator , $parents );
2005-02-25 10:50:55 -05:00
}
2007-06-12 20:16:33 -04:00
function in_category ( $category ) { // Check if the current post is in the given category
global $object_term_cache , $post , $blog_id ;
2005-10-12 13:01:50 -04:00
2007-06-12 20:16:33 -04:00
if ( isset ( $object_term_cache [ $blog_id ][ $post -> ID ][ 'category' ][ $category ] ) )
2006-06-04 17:36:52 -04:00
return true ;
2005-10-12 13:01:50 -04:00
else
2006-06-04 17:36:52 -04:00
return false ;
2004-01-27 04:58:01 -05:00
}
2006-06-04 17:36:52 -04:00
function the_category ( $separator = '' , $parents = '' ) {
echo get_the_category_list ( $separator , $parents );
2004-01-27 04:58:01 -05:00
}
function category_description ( $category = 0 ) {
2005-10-12 13:01:50 -04:00
global $cat ;
if ( ! $category )
$category = $cat ;
2007-06-06 12:13:12 -04:00
return get_term_field ( 'description' , $category , 'category' );
2004-01-27 04:58:01 -05:00
}
2006-03-01 23:51:24 -05:00
function wp_dropdown_categories ( $args = '' ) {
2007-05-10 23:10:05 -04:00
$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'
);
2007-06-13 22:25:30 -04:00
2006-08-31 17:36:21 -04:00
$defaults [ 'selected' ] = ( is_category () ) ? get_query_var ( 'cat' ) : 0 ;
2007-06-13 22:25:30 -04:00
2007-05-10 23:10:05 -04:00
$r = wp_parse_args ( $args , $defaults );
2006-03-01 23:51:24 -05:00
$r [ 'include_last_update_time' ] = $r [ 'show_last_update' ];
2007-05-10 23:10:05 -04:00
extract ( $r );
2006-03-01 23:51:24 -05:00
2006-03-02 00:47:59 -05:00
$categories = get_categories ( $r );
2006-03-01 23:51:24 -05:00
$output = '' ;
if ( ! empty ( $categories ) ) {
2006-12-01 18:00:04 -05:00
$output = " <select name=' $name ' id=' $name ' class=' $class '> \n " ;
2006-03-01 23:51:24 -05:00
if ( $show_option_all ) {
$show_option_all = apply_filters ( 'list_cats' , $show_option_all );
$output .= " \t <option value='0'> $show_option_all </option> \n " ;
}
2006-11-19 02:56:05 -05:00
if ( $show_option_none ) {
$show_option_none = apply_filters ( 'list_cats' , $show_option_none );
2006-03-01 23:51:24 -05:00
$output .= " \t <option value='-1'> $show_option_none </option> \n " ;
2005-10-12 13:01:50 -04:00
}
2006-03-01 23:51:24 -05:00
if ( $hierarchical )
$depth = 0 ; // Walk the full depth.
else
$depth = - 1 ; // Flat.
2006-04-13 00:40:48 -04:00
$output .= walk_category_dropdown_tree ( $categories , $depth , $r );
2006-03-01 23:51:24 -05:00
$output .= " </select> \n " ;
2005-10-12 13:01:50 -04:00
}
2006-03-01 23:51:24 -05:00
$output = apply_filters ( 'wp_dropdown_cats' , $output );
if ( $echo )
echo $output ;
return $output ;
}
function wp_list_categories ( $args = '' ) {
2007-05-10 23:10:05 -04:00
$defaults = array (
'show_option_all' => '' , 'orderby' => 'name' ,
'order' => 'ASC' , 'show_last_update' => 0 ,
'style' => 'list' , 'show_count' => 0 ,
'hide_empty' => 1 , 'use_desc_for_title' => 1 ,
'child_of' => 0 , 'feed' => '' ,
'feed_image' => '' , 'exclude' => '' ,
'hierarchical' => true , 'title_li' => __ ( 'Categories' )
);
2007-06-13 22:25:30 -04:00
2007-05-10 23:10:05 -04:00
$r = wp_parse_args ( $args , $defaults );
2007-06-13 22:25:30 -04:00
2007-05-10 23:10:05 -04:00
if ( ! isset ( $r [ 'pad_counts' ] ) && $r [ 'show_count' ] && $r [ 'hierarchical' ] ) {
2007-01-09 03:45:05 -05:00
$r [ 'pad_counts' ] = true ;
2007-05-10 23:10:05 -04:00
}
2007-06-13 22:25:30 -04:00
2007-05-10 23:10:05 -04:00
if ( isset ( $r [ 'show_date' ] ) ) {
2006-09-19 19:56:28 -04:00
$r [ 'include_last_update_time' ] = $r [ 'show_date' ];
2007-05-10 23:10:05 -04:00
}
2007-06-13 22:25:30 -04:00
2007-05-10 23:10:05 -04:00
extract ( $r );
2007-06-13 22:25:30 -04:00
2006-03-02 00:47:59 -05:00
$categories = get_categories ( $r );
2006-11-19 02:56:05 -05:00
2006-03-01 08:30:19 -05:00
$output = '' ;
2006-06-16 20:05:00 -04:00
if ( $title_li && 'list' == $style )
2006-03-01 08:30:19 -05:00
$output = '<li class="categories">' . $r [ 'title_li' ] . '<ul>' ;
if ( empty ( $categories ) ) {
2007-01-19 15:58:56 -05:00
if ( 'list' == $style )
2006-03-01 08:30:19 -05:00
$output .= '<li>' . __ ( " No categories " ) . '</li>' ;
else
$output .= __ ( " No categories " );
} else {
global $wp_query ;
2007-06-13 22:25:30 -04:00
2007-04-13 19:20:14 -04:00
if ( ! empty ( $show_option_all ) )
if ( 'list' == $style )
$output .= '<li><a href="' . get_bloginfo ( 'url' ) . '">' . $show_option_all . '</a></li>' ;
else
$output .= '<a href="' . get_bloginfo ( 'url' ) . '">' . $show_option_all . '</a>' ;
2007-06-13 22:25:30 -04:00
2006-12-01 13:55:27 -05:00
if ( is_category () )
$r [ 'current_category' ] = $wp_query -> get_queried_object_id ();
2006-03-01 08:30:19 -05:00
if ( $hierarchical )
$depth = 0 ; // Walk the full depth.
else
$depth = - 1 ; // Flat.
2006-04-13 00:40:48 -04:00
$output .= walk_category_tree ( $categories , $depth , $r );
2004-04-30 14:28:50 -04:00
}
2006-06-16 20:05:00 -04:00
if ( $title_li && 'list' == $style )
2006-03-01 08:30:19 -05:00
$output .= '</ul></li>' ;
2006-11-19 02:56:05 -05:00
2007-01-16 17:50:30 -05:00
echo apply_filters ( 'wp_list_categories' , $output );
2006-03-01 08:30:19 -05:00
}
2005-08-30 19:25:34 -04:00
2007-04-10 15:52:15 -04:00
function wp_tag_cloud ( $args = '' ) {
$defaults = array (
'smallest' => 8 , 'largest' => 22 , 'unit' => 'pt' , 'number' => 45 ,
'format' => 'flat' , 'orderby' => 'name' , 'order' => 'ASC' ,
'exclude' => '' , 'include' => ''
);
$args = wp_parse_args ( $args , $defaults );
$tags = get_tags ( array_merge ( $args , array ( 'orderby' => 'count' , 'order' => 'DESC' )) ); // Always query top tags
if ( empty ( $tags ) )
return ;
$return = wp_generate_tag_cloud ( $tags , $args ); // Here's where those top tags get sorted according to $args
echo apply_filters ( 'wp_tag_cloud' , $return , $args );
}
// $tags = prefetched tag array ( get_tags() )
// $args['format'] = 'flat' => whitespace separated, 'list' => UL, 'array' => array()
// $args['orderby'] = 'name', 'count'
function wp_generate_tag_cloud ( $tags , $args = '' ) {
global $wp_rewrite ;
$defaults = array (
'smallest' => 8 , 'largest' => 22 , 'unit' => 'pt' , 'number' => 45 ,
'format' => 'flat' , 'orderby' => 'name' , 'order' => 'ASC'
);
$args = wp_parse_args ( $args , $defaults );
extract ( $args );
if ( ! $tags )
return ;
$counts = $tag_links = array ();
foreach ( ( array ) $tags as $tag ) {
2007-05-22 23:57:20 -04:00
$counts [ $tag -> name ] = $tag -> count ;
$tag_links [ $tag -> name ] = get_tag_link ( $tag -> term_id );
2007-04-10 15:52:15 -04:00
}
$min_count = min ( $counts );
$spread = max ( $counts ) - $min_count ;
if ( $spread <= 0 )
$spread = 1 ;
$font_spread = $largest - $smallest ;
if ( $font_spread <= 0 )
$font_spread = 1 ;
$font_step = $font_spread / $spread ;
// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
if ( 'name' == $orderby )
uksort ( $counts , 'strnatcasecmp' );
else
asort ( $counts );
if ( 'DESC' == $order )
2007-07-12 12:00:51 -04:00
$counts = array_reverse ( $counts , true );
2007-04-10 15:52:15 -04:00
$a = array ();
$rel = ( is_object ( $wp_rewrite ) && $wp_rewrite -> using_permalinks () ) ? ' rel="tag"' : '' ;
foreach ( $counts as $tag => $count ) {
$tag_link = clean_url ( $tag_links [ $tag ]);
$tag = str_replace ( ' ' , ' ' , wp_specialchars ( $tag ));
$a [] = " <a href=' $tag_link ' title=' " . attribute_escape ( sprintf ( __ ( '%d topics' ), $count ) ) . " ' $rel style='font-size: " .
( $smallest + ( ( $count - $min_count ) * $font_step ) )
. " $unit ;'> $tag </a> " ;
}
switch ( $format ) :
case 'array' :
$return =& $a ;
break ;
case 'list' :
$return = " <ul class='wp-tag-cloud'> \n \t <li> " ;
$return .= join ( " </li> \n \t <li> " , $a );
$return .= " </li> \n </ul> \n " ;
break ;
default :
$return = join ( " \n " , $a );
break ;
endswitch ;
return apply_filters ( 'wp_generate_tag_cloud' , $return , $tags , $args );
}
2006-06-04 17:36:52 -04:00
//
// Helper functions
//
2006-03-01 08:30:19 -05:00
2006-06-04 17:36:52 -04:00
function walk_category_tree () {
$walker = new Walker_Category ;
$args = func_get_args ();
return call_user_func_array ( array ( & $walker , 'walk' ), $args );
2006-03-01 08:30:19 -05:00
}
2006-06-04 17:36:52 -04:00
function walk_category_dropdown_tree () {
$walker = new Walker_CategoryDropdown ;
$args = func_get_args ();
return call_user_func_array ( array ( & $walker , 'walk' ), $args );
2006-02-26 23:57:30 -05:00
}
2007-04-10 17:23:11 -04:00
//
// Tags
//
function get_tag_link ( $tag_id ) {
global $wp_rewrite ;
2007-05-22 23:57:20 -04:00
$taglink = $wp_rewrite -> get_tag_permastruct ();
2007-04-10 17:23:11 -04:00
2007-05-22 23:57:20 -04:00
$tag = & get_term ( $tag_id , 'post_tag' );
$slug = $tag -> slug ;
2007-04-10 17:23:11 -04:00
2007-05-25 12:27:34 -04:00
if ( empty ( $taglink ) ) {
2007-04-10 17:23:11 -04:00
$file = get_option ( 'home' ) . '/' ;
2007-05-22 23:57:20 -04:00
$taglink = $file . '?tag=' . $slug ;
2007-04-10 17:23:11 -04:00
} else {
2007-05-22 23:57:20 -04:00
$taglink = str_replace ( '%tag%' , $slug , $taglink );
$taglink = get_option ( 'home' ) . user_trailingslashit ( $taglink , 'category' );
2007-04-10 17:23:11 -04:00
}
2007-05-22 23:57:20 -04:00
return apply_filters ( 'tag_link' , $taglink , $tag_id );
2007-04-10 17:23:11 -04:00
}
function get_the_tags ( $id = 0 ) {
global $post ;
2007-06-13 22:25:30 -04:00
2007-04-10 17:23:11 -04:00
$id = ( int ) $id ;
if ( ! $id && ! in_the_loop () )
return false ; // in-the-loop function
2007-06-13 22:25:30 -04:00
2007-04-10 17:23:11 -04:00
if ( ! $id )
$id = ( int ) $post -> ID ;
2007-05-31 17:38:33 -04:00
$tags = get_object_term_cache ( $id , 'post_tag' );
2007-05-29 23:36:59 -04:00
if ( false === $tags )
2007-06-18 20:33:44 -04:00
$tags = wp_get_object_terms ( $id , 'post_tag' );
2007-05-29 23:36:59 -04:00
2007-04-10 17:23:11 -04:00
$tags = apply_filters ( 'get_the_tags' , $tags );
if ( empty ( $tags ) )
return false ;
return $tags ;
}
function the_tags ( $before = 'Tags: ' , $sep = ', ' , $after = '' ) {
$tags = get_the_tags ();
if ( empty ( $tags ) )
return false ;
2007-06-13 22:25:30 -04:00
2007-04-10 17:23:11 -04:00
$tag_list = $before ;
foreach ( $tags as $tag )
2007-06-15 14:26:43 -04:00
$tag_links [] = '<a href="' . get_tag_link ( $tag -> term_id ) . '" rel="tag">' . $tag -> name . '</a>' ;
2007-04-10 17:23:11 -04:00
$tag_links = join ( $sep , $tag_links );
$tag_links = apply_filters ( 'the_tags' , $tag_links );
$tag_list .= $tag_links ;
$tag_list .= $after ;
echo $tag_list ;
}
2005-11-01 13:22:30 -05:00
?>