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 '' ;
$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 )
$category_nicename = get_category_parents ( $parent , false , '/' , true ) . $category_nicename . '/' ;
$catlink = str_replace ( '%category%' , $category_nicename , $catlink );
2006-08-30 23:46:31 +02:00
$catlink = get_option ( 'home' ) . trailingslashit ( $catlink );
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 ;
if ( $parent -> category_parent )
$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 ) {
2005-10-12 19:01:50 +02:00
global $post , $category_cache ;
2004-06-04 04:36:46 +02:00
2005-03-01 10:10:12 +01:00
if ( ! $id )
$id = $post -> ID ;
2004-06-04 04:36:46 +02:00
2005-10-12 19:01:50 +02:00
if ( ! isset ( $category_cache [ $id ]) )
2005-03-27 22:45:01 +02:00
update_post_category_cache ( $id );
$categories = $category_cache [ $id ];
2004-11-13 00:08:51 +01:00
2005-10-12 19:01:50 +02:00
if ( ! empty ( $categories ) )
2005-03-01 10:10:12 +01:00
sort ( $categories );
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
}
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 = '' ) {
2005-10-12 19:01:50 +02:00
$categories = get_the_category ();
if ( empty ( $categories ))
return apply_filters ( 'the_category' , __ ( 'Uncategorized' ), $separator , $parents );
$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 );
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" rel="category tag">' . $category -> cat_name . '</a></li>' ;
break ;
case 'single' :
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . ' rel="category tag">' ;
if ( $category -> category_parent )
$thelist .= get_category_parents ( $category -> category_parent , FALSE );
$thelist .= $category -> cat_name . '</a></li>' ;
break ;
case '' :
default :
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" rel="category tag">' . $category -> cat_name . '</a></li>' ;
}
}
$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 );
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" rel="category tag">' . $category -> cat_name . '</a>' ;
break ;
case 'single' :
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" rel="category tag">' ;
if ( $category -> category_parent )
$thelist .= get_category_parents ( $category -> category_parent , FALSE );
$thelist .= " $category->cat_name </a> " ;
break ;
case '' :
default :
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" rel="category tag">' . $category -> cat_name . '</a>' ;
}
++ $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
global $category_cache , $post ;
2005-10-12 19:01:50 +02:00
2006-06-04 23:36:52 +02:00
if ( isset ( $category_cache [ $post -> ID ][ $category ] ) )
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
}
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 ) ) {
$output = " <select name=' $name ' class=' $class '> \n " ;
if ( $show_option_all ) {
$show_option_all = apply_filters ( 'list_cats' , $show_option_all );
$output .= " \t <option value='0'> $show_option_all </option> \n " ;
}
if ( $show_option_none ) {
$show_option_none = apply_filters ( 'list_cats' , $show_option_none );
$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 );
2006-03-03 22:38:36 +01:00
$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-03-02 05:51:24 +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 ) ) {
if ( $list )
$output .= '<li>' . __ ( " No categories " ) . '</li>' ;
else
$output .= __ ( " No categories " );
} else {
global $wp_query ;
2006-04-13 06:40:48 +02:00
$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>' ;
echo apply_filters ( 'list_cats' , $output );
}
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
?>