2004-01-27 10:58:01 +01:00
< ? php
2006-06-04 23:36:52 +02:00
function get_category_children ( $id , $before = '/' , $after = '' ) {
if ( 0 == $id )
return '' ;
2006-10-03 17:41:44 +02:00
$chain = '' ;
2006-06-04 23:36:52 +02:00
$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 ;
2006-04-13 06:40:48 +02:00
}
2006-06-04 23:36:52 +02:00
function get_category_link ( $category_id ) {
global $wp_rewrite ;
$catlink = $wp_rewrite -> get_category_permastruct ();
if ( empty ( $catlink ) ) {
2006-08-30 23:46:31 +02:00
$file = get_option ( 'home' ) . '/' ;
2006-06-04 23:36:52 +02:00
$catlink = $file . '?cat=' . $category_id ;
} else {
$category = & get_category ( $category_id );
$category_nicename = $category -> category_nicename ;
if ( $parent = $category -> category_parent )
2007-02-15 08:07:12 +01:00
$category_nicename = get_category_parents ( $parent , false , '/' , true ) . $category_nicename ;
2006-06-04 23:36:52 +02:00
$catlink = str_replace ( '%category%' , $category_nicename , $catlink );
2007-03-10 07:18:43 +01:00
$catlink = get_option ( 'home' ) . user_trailingslashit ( $catlink , 'category' );
2006-06-04 23:36:52 +02: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 )
$name = $parent -> category_nicename ;
else
$name = $parent -> cat_name ;
2006-09-07 19:42:24 +02:00
if ( $parent -> category_parent && ( $parent -> category_parent != $parent -> cat_ID ) )
2006-06-04 23:36:52 +02:00
$chain .= get_category_parents ( $parent -> category_parent , $link , $separator , $nicename );
if ( $link )
$chain .= '<a href="' . get_category_link ( $parent -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $parent -> cat_name ) . '">' . $name . '</a>' . $separator ;
else
$chain .= $name . $separator ;
return $chain ;
2006-04-13 06:40:48 +02:00
}
2004-06-04 04:36:46 +02:00
function get_the_category ( $id = false ) {
2006-11-23 21:39:39 +01:00
global $post , $category_cache , $blog_id ;
2004-06-04 04:36:46 +02:00
2007-03-22 21:52:29 +01:00
$id = ( int ) $id ;
2005-03-01 10:10:12 +01:00
if ( ! $id )
2007-03-23 03:16:16 +01:00
$id = ( int ) $post -> ID ;
2004-06-04 04:36:46 +02:00
2006-11-23 21:39:39 +01:00
if ( ! isset ( $category_cache [ $blog_id ][ $id ]) )
2005-03-27 22:45:01 +02:00
update_post_category_cache ( $id );
2006-11-23 21:39:39 +01:00
$categories = $category_cache [ $blog_id ][ $id ];
2004-11-13 00:08:51 +01:00
2005-10-12 19:01:50 +02:00
if ( ! empty ( $categories ) )
2007-02-21 03:13:47 +01:00
usort ( $categories , '_get_the_category_usort' );
2005-03-01 10:10:12 +01:00
else
$categories = array ();
2004-11-15 07:00:21 +01:00
2005-03-01 10:10:12 +01:00
return $categories ;
2004-01-27 10:58:01 +01:00
}
2007-02-21 03:13:47 +01:00
function _get_the_category_usort ( $a , $b ) {
return strcmp ( $a -> category_name , $b -> category_name );
}
2006-06-04 23:36:52 +02:00
function get_the_category_by_ID ( $cat_ID ) {
$cat_ID = ( int ) $cat_ID ;
$category = & get_category ( $cat_ID );
return $category -> cat_name ;
2004-01-27 10:58:01 +01:00
}
2005-02-25 16:50:55 +01:00
function get_the_category_list ( $separator = '' , $parents = '' ) {
2007-01-23 09:21:28 +01:00
global $wp_rewrite ;
2005-10-12 19:01:50 +02:00
$categories = get_the_category ();
if ( empty ( $categories ))
return apply_filters ( 'the_category' , __ ( 'Uncategorized' ), $separator , $parents );
2007-01-23 09:21:28 +01:00
$rel = ( is_object ( $wp_rewrite ) && $wp_rewrite -> using_permalinks () ) ? 'rel="category tag"' : 'rel="category"' ;
2005-10-12 19:01:50 +02:00
$thelist = '' ;
if ( '' == $separator ) {
$thelist .= '<ul class="post-categories">' ;
foreach ( $categories as $category ) {
$thelist .= " \n \t <li> " ;
switch ( strtolower ( $parents ) ) {
case 'multiple' :
if ( $category -> category_parent )
$thelist .= get_category_parents ( $category -> category_parent , TRUE );
2007-01-24 06:44:24 +01:00
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" ' . $rel . '>' . $category -> cat_name . '</a></li>' ;
2005-10-12 19:01:50 +02:00
break ;
case 'single' :
2007-01-24 06:44:24 +01:00
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" ' . $rel . '>' ;
2005-10-12 19:01:50 +02:00
if ( $category -> category_parent )
$thelist .= get_category_parents ( $category -> category_parent , FALSE );
$thelist .= $category -> cat_name . '</a></li>' ;
break ;
case '' :
default :
2007-01-24 06:44:24 +01:00
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" ' . $rel . '>' . $category -> cat_name . '</a></li>' ;
2005-10-12 19:01:50 +02:00
}
}
$thelist .= '</ul>' ;
} 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 );
2007-01-24 06:44:24 +01:00
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" ' . $rel . '>' . $category -> cat_name . '</a>' ;
2005-10-12 19:01:50 +02:00
break ;
case 'single' :
2007-01-24 06:44:24 +01:00
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" ' . $rel . '>' ;
2005-10-12 19:01:50 +02:00
if ( $category -> category_parent )
$thelist .= get_category_parents ( $category -> category_parent , FALSE );
$thelist .= " $category->cat_name </a> " ;
break ;
case '' :
default :
2007-01-24 06:44:24 +01:00
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" ' . $rel . '>' . $category -> cat_name . '</a>' ;
2005-10-12 19:01:50 +02:00
}
++ $i ;
}
}
return apply_filters ( 'the_category' , $thelist , $separator , $parents );
2005-02-25 16:50:55 +01:00
}
2006-06-04 23:36:52 +02:00
function in_category ( $category ) { // Check if the current post is in the given category
2006-11-23 21:39:39 +01:00
global $category_cache , $post , $blog_id ;
2005-10-12 19:01:50 +02:00
2006-11-23 21:39:39 +01:00
if ( isset ( $category_cache [ $blog_id ][ $post -> ID ][ $category ] ) )
2006-06-04 23:36:52 +02:00
return true ;
2005-10-12 19:01:50 +02:00
else
2006-06-04 23:36:52 +02:00
return false ;
2004-01-27 10:58:01 +01:00
}
2006-06-04 23:36:52 +02:00
function the_category ( $separator = '' , $parents = '' ) {
echo get_the_category_list ( $separator , $parents );
2004-01-27 10:58:01 +01:00
}
2007-03-26 10:08:31 +02:00
function get_post_tags ( $post_id = 0 ) {
global $tag_cache , $blog_id ;
$post_id = ( int ) $post_id ;
if ( ! isset ( $tag_cache [ $blog_id ][ $post_id ] ) )
update_post_category_cache ( $post_id ); // loads $tag_cache
return $tag_cache [ $blog_id ][ $post_id ];
}
function get_the_tags ( $before , $sep , $after ) {
global $post ;
if ( ! $post )
return false ; // in-the-loop function
$tags = get_post_tags ( $post -> ID );
if ( empty ( $tags ) )
return false ;
$return = $before ;
foreach ( $tags as $tag )
$tag_links [] = '<a href="' . get_category_link ( $tag -> cat_ID ) . '">' . $tag -> cat_name . '</a>' ;
$tag_links = join ( $sep , $tag_links );
$tag_links = apply_filters ( 'the_tags' , $tag_links );
$return .= $tag_links ;
$return .= $after ;
return $return ;
}
function the_tags ( $before = 'Tags: ' , $sep = ', ' , $after = '' ) {
echo get_the_tags ( $before , $sep , $after );
}
2004-01-27 10:58:01 +01:00
function category_description ( $category = 0 ) {
2005-10-12 19:01:50 +02:00
global $cat ;
if ( ! $category )
$category = $cat ;
$category = & get_category ( $category );
return apply_filters ( 'category_description' , $category -> category_description , $category -> cat_ID );
2004-01-27 10:58:01 +01:00
}
2006-03-02 05:51:24 +01:00
function wp_dropdown_categories ( $args = '' ) {
2006-03-02 06:47:59 +01:00
if ( is_array ( $args ) )
$r = & $args ;
else
parse_str ( $args , $r );
2006-03-02 07:37:00 +01:00
$defaults = array ( 'show_option_all' => '' , 'show_option_none' => '' , 'orderby' => 'ID' ,
2006-03-03 22:38:36 +01:00
'order' => 'ASC' , 'show_last_update' => 0 , 'show_count' => 0 ,
2006-03-02 07:37:00 +01:00
'hide_empty' => 1 , 'child_of' => 0 , 'exclude' => '' , 'echo' => 1 ,
'selected' => 0 , 'hierarchical' => 0 , 'name' => 'cat' ,
'class' => 'postform' );
2006-08-31 23:36:21 +02:00
$defaults [ 'selected' ] = ( is_category () ) ? get_query_var ( 'cat' ) : 0 ;
2006-03-02 07:37:00 +01:00
$r = array_merge ( $defaults , $r );
2006-03-02 05:51:24 +01:00
$r [ 'include_last_update_time' ] = $r [ 'show_last_update' ];
extract ( $r );
2006-03-02 06:47:59 +01:00
$categories = get_categories ( $r );
2006-03-02 05:51:24 +01:00
$output = '' ;
if ( ! empty ( $categories ) ) {
2006-12-02 00:00:04 +01:00
$output = " <select name=' $name ' id=' $name ' class=' $class '> \n " ;
2006-03-02 05:51:24 +01: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 08:56:05 +01:00
if ( $show_option_none ) {
$show_option_none = apply_filters ( 'list_cats' , $show_option_none );
2006-03-02 05:51:24 +01:00
$output .= " \t <option value='-1'> $show_option_none </option> \n " ;
2005-10-12 19:01:50 +02:00
}
2006-03-02 05:51:24 +01:00
if ( $hierarchical )
$depth = 0 ; // Walk the full depth.
else
$depth = - 1 ; // Flat.
2006-04-13 06:40:48 +02:00
$output .= walk_category_dropdown_tree ( $categories , $depth , $r );
2006-03-02 05:51:24 +01:00
$output .= " </select> \n " ;
2005-10-12 19:01:50 +02:00
}
2006-03-02 05:51:24 +01:00
$output = apply_filters ( 'wp_dropdown_cats' , $output );
if ( $echo )
echo $output ;
return $output ;
}
function wp_list_categories ( $args = '' ) {
2006-03-02 06:47:59 +01:00
if ( is_array ( $args ) )
$r = & $args ;
else
parse_str ( $args , $r );
2006-06-17 02:05:00 +02:00
$defaults = array ( 'show_option_all' => '' , 'orderby' => 'name' ,
'order' => 'ASC' , 'show_last_update' => 0 , 'style' => 'list' ,
2006-03-03 22:38:36 +01:00
'show_count' => 0 , 'hide_empty' => 1 , 'use_desc_for_title' => 1 ,
2006-03-02 07:37:00 +01:00
'child_of' => 0 , 'feed' => '' , 'feed_image' => '' , 'exclude' => '' ,
2006-06-17 02:05:00 +02:00
'hierarchical' => true , 'title_li' => __ ( 'Categories' ));
2006-03-02 07:37:00 +01:00
$r = array_merge ( $defaults , $r );
2007-01-09 09:45:05 +01:00
if ( ! isset ( $r [ 'pad_counts' ]) && $r [ 'show_count' ] && $r [ 'hierarchical' ] )
$r [ 'pad_counts' ] = true ;
2006-09-20 01:56:28 +02:00
if ( isset ( $r [ 'show_date' ]) )
$r [ 'include_last_update_time' ] = $r [ 'show_date' ];
2006-03-01 14:30:19 +01:00
extract ( $r );
2006-03-02 06:47:59 +01:00
$categories = get_categories ( $r );
2006-11-19 08:56:05 +01:00
2006-03-01 14:30:19 +01:00
$output = '' ;
2006-06-17 02:05:00 +02:00
if ( $title_li && 'list' == $style )
2006-03-01 14:30:19 +01:00
$output = '<li class="categories">' . $r [ 'title_li' ] . '<ul>' ;
if ( empty ( $categories ) ) {
2007-01-19 21:58:56 +01:00
if ( 'list' == $style )
2006-03-01 14:30:19 +01:00
$output .= '<li>' . __ ( " No categories " ) . '</li>' ;
else
$output .= __ ( " No categories " );
} else {
global $wp_query ;
2007-02-27 16:24:54 +01:00
2006-12-01 19:55:27 +01:00
if ( is_category () )
$r [ 'current_category' ] = $wp_query -> get_queried_object_id ();
2006-03-01 14:30:19 +01:00
if ( $hierarchical )
$depth = 0 ; // Walk the full depth.
else
$depth = - 1 ; // Flat.
2006-04-13 06:40:48 +02:00
$output .= walk_category_tree ( $categories , $depth , $r );
2004-04-30 20:28:50 +02:00
}
2006-06-17 02:05:00 +02:00
if ( $title_li && 'list' == $style )
2006-03-01 14:30:19 +01:00
$output .= '</ul></li>' ;
2006-11-19 08:56:05 +01:00
2007-01-16 23:50:30 +01:00
echo apply_filters ( 'wp_list_categories' , $output );
2006-03-01 14:30:19 +01:00
}
2005-08-31 01:25:34 +02:00
2006-06-04 23:36:52 +02:00
//
// Helper functions
//
2006-03-01 14:30:19 +01:00
2006-06-04 23:36:52 +02: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 14:30:19 +01:00
}
2006-06-04 23:36:52 +02: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-27 05:57:30 +01:00
}
2005-11-01 19:22:30 +01:00
?>