2004-01-27 04:58:01 -05:00
< ? php
2004-06-03 22:36:46 -04:00
function get_the_category ( $id = false ) {
2005-03-27 15:45:01 -05:00
global $post , $category_cache ;
2004-06-03 22:36:46 -04:00
2005-03-01 04:10:12 -05:00
if ( ! $id )
$id = $post -> ID ;
2004-06-03 22:36:46 -04:00
2005-03-27 15:45:01 -05:00
if ( ! isset ( $category_cache [ $id ]) )
update_post_category_cache ( $id );
$categories = $category_cache [ $id ];
2004-11-12 18:08:51 -05:00
2005-03-01 04:10:12 -05:00
if ( ! empty ( $categories ))
sort ( $categories );
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
}
2005-02-13 22:27:50 -05:00
function get_category_link ( $category_id ) {
2005-03-27 15:45:01 -05:00
global $wp_rewrite ;
2005-02-13 22:27:50 -05:00
$catlink = $wp_rewrite -> get_category_permastruct ();
if ( empty ( $catlink ) ) {
$file = get_settings ( 'home' ) . '/' . get_settings ( 'blogfilename' );
2005-02-15 01:52:38 -05:00
$catlink = $file . '?cat=' . $category_id ;
2005-02-13 22:27:50 -05:00
} else {
2005-03-27 15:45:01 -05:00
$category = & get_category ( $category_id );
$category_nicename = $category -> category_nicename ;
2004-01-27 04:58:01 -05:00
2005-03-27 15:45:01 -05:00
if ( $parent = $category -> category_parent )
2005-02-13 22:27:50 -05:00
$category_nicename = get_category_parents ( $parent , false , '/' , true ) . $category_nicename . '/' ;
$catlink = str_replace ( '%category%' , $category_nicename , $catlink );
$catlink = get_settings ( 'home' ) . trailingslashit ( $catlink );
}
2005-02-15 01:52:38 -05:00
return apply_filters ( 'category_link' , $catlink , $category_id );
2004-01-27 04:58:01 -05:00
}
2005-02-25 10:50:55 -05:00
function get_the_category_list ( $separator = '' , $parents = '' ) {
2004-01-27 04:58:01 -05:00
$categories = get_the_category ();
2004-08-10 01:35:59 -04:00
if ( empty ( $categories )) {
2005-02-25 10:50:55 -05:00
return apply_filters ( 'the_category' , __ ( 'Uncategorized' ), $separator , $parents );
2004-08-10 01:35:59 -04:00
}
2004-05-09 12:34:03 -04:00
$thelist = '' ;
2005-01-04 18:29:13 -05:00
if ( '' == $separator ) {
2004-05-09 12:34:03 -04:00
$thelist .= '<ul class="post-categories">' ;
2004-01-27 04:58:01 -05:00
foreach ( $categories as $category ) {
2004-06-17 20:22:09 -04:00
$category -> cat_name = $category -> cat_name ;
2004-05-09 12:34:03 -04:00
$thelist .= " \n \t <li> " ;
2004-01-27 04:58:01 -05:00
switch ( strtolower ( $parents )) {
case 'multiple' :
2004-05-09 12:34:03 -04:00
if ( $category -> category_parent ) {
$thelist .= get_category_parents ( $category -> category_parent , TRUE );
}
2005-04-19 13:17:36 -04:00
$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>' ;
2004-01-27 04:58:01 -05:00
break ;
case 'single' :
2005-04-19 13:17:36 -04:00
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . ' rel="category tag">' ;
2004-05-09 12:34:03 -04:00
if ( $category -> category_parent ) {
$thelist .= get_category_parents ( $category -> category_parent , FALSE );
}
$thelist .= $category -> cat_name . '</a></li>' ;
2004-01-27 04:58:01 -05:00
break ;
case '' :
default :
2005-04-19 13:17:36 -04:00
$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>' ;
2004-01-27 04:58:01 -05:00
}
}
2004-05-09 12:34:03 -04:00
$thelist .= '</ul>' ;
2004-01-27 04:58:01 -05:00
} else {
$i = 0 ;
foreach ( $categories as $category ) {
2004-06-17 20:22:09 -04:00
$category -> cat_name = $category -> cat_name ;
2005-01-04 18:29:13 -05:00
if ( 0 < $i ) $thelist .= $separator . ' ' ;
2004-01-27 04:58:01 -05:00
switch ( strtolower ( $parents )) {
case 'multiple' :
2004-05-09 12:34:03 -04:00
if ( $category -> category_parent ) $thelist .= get_category_parents ( $category -> category_parent , TRUE );
2005-04-19 13:17:36 -04:00
$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>' ;
2004-06-21 21:42:24 -04:00
break ;
2004-01-27 04:58:01 -05:00
case 'single' :
2005-04-19 13:17:36 -04:00
$thelist .= '<a href="' . get_category_link ( $category -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '" rel="category tag">' ;
2004-05-09 12:34:03 -04:00
if ( $category -> category_parent ) $thelist .= get_category_parents ( $category -> category_parent , FALSE );
$thelist .= " $category->cat_name </a> " ;
2004-06-21 21:42:24 -04:00
break ;
2004-01-27 04:58:01 -05:00
case '' :
default :
2005-04-19 13:17:36 -04:00
$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>' ;
2004-01-27 04:58:01 -05:00
}
++ $i ;
}
}
2005-02-25 10:50:55 -05:00
return apply_filters ( 'the_category' , $thelist , $separator , $parents );
}
function the_category ( $separator = '' , $parents = '' ) {
echo get_the_category_list ( $separator , $parents );
2004-01-27 04:58:01 -05:00
}
function get_the_category_by_ID ( $cat_ID ) {
2005-05-27 02:10:41 -04:00
$cat_ID = ( int ) $cat_ID ;
2005-03-27 15:45:01 -05:00
$category = & get_category ( $cat_ID );
return $category -> cat_name ;
2004-01-27 04:58:01 -05:00
}
2004-02-16 23:56:29 -05:00
function get_category_parents ( $id , $link = FALSE , $separator = '/' , $nicename = FALSE ){
2004-05-24 04:22:18 -04:00
$chain = '' ;
2005-03-27 15:45:01 -05:00
$parent = & get_category ( $id );
2004-01-27 04:58:01 -05:00
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 ) {
2005-02-13 22:27:50 -05:00
$chain .= '<a href="' . get_category_link ( $parent -> cat_ID ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $parent -> cat_name ) . '">' . $name . '</a>' . $separator ;
2004-01-27 04:58:01 -05:00
} else {
$chain .= $name . $separator ;
}
return $chain ;
}
2004-02-16 23:56:29 -05:00
function get_category_children ( $id , $before = '/' , $after = '' ) {
2005-05-13 22:57:47 -04:00
global $cache_categories ;
if ( ! isset ( $cache_categories ))
update_category_cache ();
$c_cache = $cache_categories ; // Can't do recursive foreach on a global, have to make a copy
$chain = '' ;
foreach ( $c_cache as $category ){
if ( $category -> category_parent == $id ){
$chain .= $before . $category -> cat_ID . $after ;
$chain .= get_category_children ( $category -> cat_ID , $before , $after );
}
}
return $chain ;
2004-01-27 04:58:01 -05:00
}
2004-05-27 17:19:37 -04:00
// Deprecated.
2004-02-16 23:56:29 -05:00
function the_category_ID ( $echo = true ) {
2004-05-27 17:19:37 -04:00
// Grab the first cat in the list.
$categories = get_the_category ();
2005-04-19 13:17:36 -04:00
$cat = $categories [ 0 ] -> cat_ID ;
2004-05-27 17:19:37 -04:00
if ( $echo ) echo $cat ;
return $cat ;
2004-01-27 04:58:01 -05:00
}
2004-05-27 17:19:37 -04:00
// Deprecated.
2004-01-27 04:58:01 -05:00
function the_category_head ( $before = '' , $after = '' ) {
2004-05-27 17:19:37 -04:00
global $currentcat , $previouscat ;
// Grab the first cat in the list.
$categories = get_the_category ();
$currentcat = $categories [ 0 ] -> category_id ;
2004-01-27 04:58:01 -05:00
if ( $currentcat != $previouscat ) {
echo $before ;
echo get_the_category_by_ID ( $currentcat );
echo $after ;
$previouscat = $currentcat ;
}
}
function category_description ( $category = 0 ) {
2005-03-27 15:45:01 -05:00
global $cat ;
2004-01-27 04:58:01 -05:00
if ( ! $category ) $category = $cat ;
2005-03-27 15:45:01 -05:00
$category = & get_category ( $category );
return apply_filters ( 'category_description' , $category -> category_description , $category -> cat_ID );
2004-01-27 04:58:01 -05:00
}
// out of the WordPress loop
function dropdown_cats ( $optionall = 1 , $all = 'All' , $sort_column = 'ID' , $sort_order = 'asc' ,
$optiondates = 0 , $optioncount = 0 , $hide_empty = 1 , $optionnone = FALSE ,
$selected = 0 , $hide = 0 ) {
2004-05-24 04:22:18 -04:00
global $wpdb ;
2004-12-23 20:34:47 -05:00
if (( $file == 'blah' ) || ( $file == '' )) $file = get_settings ( 'home' ) . '/' ;
2004-01-27 04:58:01 -05:00
if ( ! $selected ) $selected = $cat ;
$sort_column = 'cat_' . $sort_column ;
$query = "
SELECT cat_ID , cat_name , category_nicename , category_parent ,
2004-05-24 04:22:18 -04:00
COUNT ( $wpdb -> post2cat . post_id ) AS cat_count ,
2004-01-27 04:58:01 -05:00
DAYOFMONTH ( MAX ( post_date )) AS lastday , MONTH ( MAX ( post_date )) AS lastmonth
2004-05-24 04:22:18 -04:00
FROM $wpdb -> categories LEFT JOIN $wpdb -> post2cat ON ( cat_ID = category_id )
LEFT JOIN $wpdb -> posts ON ( ID = post_id )
2004-01-27 04:58:01 -05:00
WHERE cat_ID > 0
" ;
if ( $hide ) {
$query .= " AND cat_ID != $hide " ;
$query .= get_category_children ( $hide , " AND cat_ID != " );
}
$query .= " GROUP BY cat_ID " ;
if ( intval ( $hide_empty ) == 1 ) $query .= " HAVING cat_count > 0 " ;
$query .= " ORDER BY $sort_column $sort_order , post_date DESC " ;
$categories = $wpdb -> get_results ( $query );
echo " <select name='cat' class='postform'> \n " ;
if ( intval ( $optionall ) == 1 ) {
$all = apply_filters ( 'list_cats' , $all );
2005-03-16 16:36:18 -05:00
echo " \t <option value='0'> $all </option> \n " ;
2004-01-27 04:58:01 -05:00
}
2005-03-16 16:36:18 -05:00
if ( intval ( $optionnone ) == 1 ) echo " \t <option value='-1'> " . __ ( 'None' ) . " </option> \n " ;
2004-01-27 04:58:01 -05:00
if ( $categories ) {
foreach ( $categories as $category ) {
2005-02-05 22:40:08 -05:00
$cat_name = apply_filters ( 'list_cats' , $category -> cat_name , $category );
2004-01-27 04:58:01 -05:00
echo " \t <option value= \" " . $category -> cat_ID . " \" " ;
if ( $category -> cat_ID == $selected )
echo ' selected="selected"' ;
echo '>' ;
2004-06-17 20:22:09 -04:00
echo $cat_name ;
2004-01-27 04:58:01 -05:00
if ( intval ( $optioncount ) == 1 ) echo ' (' . $category -> cat_count . ')' ;
if ( intval ( $optiondates ) == 1 ) echo ' ' . $category -> lastday . '/' . $category -> lastmonth ;
echo " </option> \n " ;
}
}
echo " </select> \n " ;
}
// out of the WordPress loop
2004-02-13 11:14:36 -05:00
function wp_list_cats ( $args = '' ) {
parse_str ( $args , $r );
2004-04-27 20:03:58 -04:00
if ( ! isset ( $r [ 'optionall' ])) $r [ 'optionall' ] = 0 ;
2004-03-12 18:51:16 -05:00
if ( ! isset ( $r [ 'all' ])) $r [ 'all' ] = 'All' ;
if ( ! isset ( $r [ 'sort_column' ])) $r [ 'sort_column' ] = 'ID' ;
if ( ! isset ( $r [ 'sort_order' ])) $r [ 'sort_order' ] = 'asc' ;
if ( ! isset ( $r [ 'file' ])) $r [ 'file' ] = '' ;
if ( ! isset ( $r [ 'list' ])) $r [ 'list' ] = true ;
if ( ! isset ( $r [ 'optiondates' ])) $r [ 'optiondates' ] = 0 ;
if ( ! isset ( $r [ 'optioncount' ])) $r [ 'optioncount' ] = 0 ;
if ( ! isset ( $r [ 'hide_empty' ])) $r [ 'hide_empty' ] = 1 ;
if ( ! isset ( $r [ 'use_desc_for_title' ])) $r [ 'use_desc_for_title' ] = 1 ;
if ( ! isset ( $r [ 'children' ])) $r [ 'children' ] = true ;
if ( ! isset ( $r [ 'child_of' ])) $r [ 'child_of' ] = 0 ;
if ( ! isset ( $r [ 'categories' ])) $r [ 'categories' ] = 0 ;
if ( ! isset ( $r [ 'recurse' ])) $r [ 'recurse' ] = 0 ;
2004-03-22 23:45:27 -05:00
if ( ! isset ( $r [ 'feed' ])) $r [ 'feed' ] = '' ;
if ( ! isset ( $r [ 'feed_image' ])) $r [ 'feed_image' ] = '' ;
2004-04-30 14:28:50 -04:00
if ( ! isset ( $r [ 'exclude' ])) $r [ 'exclude' ] = '' ;
2004-06-11 15:01:01 -04:00
if ( ! isset ( $r [ 'hierarchical' ])) $r [ 'hierarchical' ] = true ;
2004-03-22 23:45:27 -05:00
2005-06-19 21:30:39 -04:00
return list_cats ( $r [ 'optionall' ], $r [ 'all' ], $r [ 'sort_column' ], $r [ 'sort_order' ], $r [ 'file' ], $r [ 'list' ], $r [ 'optiondates' ], $r [ 'optioncount' ], $r [ 'hide_empty' ], $r [ 'use_desc_for_title' ], $r [ 'children' ], $r [ 'child_of' ], $r [ 'categories' ], $r [ 'recurse' ], $r [ 'feed' ], $r [ 'feed_image' ], $r [ 'exclude' ], $r [ 'hierarchical' ]);
2004-02-13 11:14:36 -05:00
}
2004-06-11 15:01:01 -04:00
function list_cats ( $optionall = 1 , $all = 'All' , $sort_column = 'ID' , $sort_order = 'asc' , $file = '' , $list = true , $optiondates = 0 , $optioncount = 0 , $hide_empty = 1 , $use_desc_for_title = 1 , $children = FALSE , $child_of = 0 , $categories = 0 , $recurse = 0 , $feed = '' , $feed_image = '' , $exclude = '' , $hierarchical = FALSE ) {
2004-05-24 04:22:18 -04:00
global $wpdb , $category_posts ;
2004-05-20 10:07:55 -04:00
// Optiondates now works
if ( '' == $file ) {
2004-12-23 20:34:47 -05:00
$file = get_settings ( 'home' ) . '/' ;
2004-05-20 10:07:55 -04:00
}
2004-04-30 14:28:50 -04:00
2004-05-05 17:29:23 -04:00
$exclusions = '' ;
2004-04-30 14:28:50 -04:00
if ( ! empty ( $exclude )) {
$excats = preg_split ( '/[\s,]+/' , $exclude );
if ( count ( $excats )) {
foreach ( $excats as $excat ) {
$exclusions .= ' AND cat_ID <> ' . intval ( $excat ) . ' ' ;
}
}
}
2005-08-30 19:25:34 -04:00
$exclusions = apply_filters ( 'list_cats_exclusions' , $exclusions );
2005-02-18 11:42:49 -05:00
if ( intval ( $categories ) == 0 ){
$sort_column = 'cat_' . $sort_column ;
2004-01-27 04:58:01 -05:00
2005-02-18 11:42:49 -05:00
$query = "
SELECT cat_ID , cat_name , category_nicename , category_description , category_parent
FROM $wpdb -> categories
WHERE cat_ID > 0 $exclusions
ORDER BY $sort_column $sort_order " ;
2004-01-27 04:58:01 -05:00
2005-02-18 11:42:49 -05:00
$categories = $wpdb -> get_results ( $query );
2004-05-20 10:07:55 -04:00
}
if ( ! count ( $category_posts )) {
2005-02-10 22:43:56 -05:00
$now = current_time ( 'mysql' , 1 );
2005-02-18 11:42:49 -05:00
$cat_counts = $wpdb -> get_results ( " SELECT cat_ID,
2004-05-24 04:22:18 -04:00
COUNT ( $wpdb -> post2cat . post_id ) AS cat_count
FROM $wpdb -> categories
INNER JOIN $wpdb -> post2cat ON ( cat_ID = category_id )
INNER JOIN $wpdb -> posts ON ( ID = post_id )
2005-02-10 22:43:56 -05:00
WHERE post_status = 'publish'
AND post_date_gmt < '$now' $exclusions
2004-05-20 10:07:55 -04:00
GROUP BY category_id " );
2004-06-06 03:21:58 -04:00
if ( ! empty ( $cat_counts )) {
foreach ( $cat_counts as $cat_count ) {
if ( 1 != intval ( $hide_empty ) || $cat_count > 0 ) {
$category_posts [ " $cat_count->cat_ID " ] = $cat_count -> cat_count ;
}
}
}
2004-05-20 10:07:55 -04:00
}
2004-12-08 20:30:34 -05:00
if ( $optiondates ) {
2005-05-13 17:13:13 -04:00
$cat_dates = $wpdb -> get_results ( " SELECT category_id,
2004-12-08 20:30:34 -05:00
UNIX_TIMESTAMP ( MAX ( post_date ) ) AS ts
2005-10-05 18:48:51 -04:00
FROM $wpdb -> posts , $wpdb -> post2cat , $wpdb -> categories
2004-12-08 20:30:34 -05:00
WHERE post_status = 'publish' AND post_id = ID $exclusions
2004-05-20 10:07:55 -04:00
GROUP BY category_id " );
foreach ( $cat_dates as $cat_date ) {
2005-05-13 17:13:13 -04:00
$category_timestamp [ " $cat_date->category_id " ] = $cat_date -> ts ;
2004-05-20 10:07:55 -04:00
}
}
$num_found = 0 ;
$thelist = " " ;
foreach ( $categories as $category ) {
2005-01-29 15:14:55 -05:00
if (( intval ( $hide_empty ) == 0 || isset ( $category_posts [ " $category->cat_ID " ])) && ( ! $hierarchical || $category -> category_parent == $child_of ) ) {
2004-05-20 10:07:55 -04:00
$num_found ++ ;
2005-02-13 22:27:50 -05:00
$link = '<a href="' . get_category_link ( $category -> cat_ID ) . '" ' ;
2004-05-20 10:07:55 -04:00
if ( $use_desc_for_title == 0 || empty ( $category -> category_description )) {
2004-12-12 15:41:19 -05:00
$link .= 'title="' . sprintf ( __ ( " View all posts filed under %s " ), wp_specialchars ( $category -> cat_name )) . '"' ;
2004-05-20 10:07:55 -04:00
} else {
2005-02-05 22:40:08 -05:00
$link .= 'title="' . wp_specialchars ( apply_filters ( 'category_description' , $category -> category_description , $category )) . '"' ;
2004-05-20 10:07:55 -04:00
}
$link .= '>' ;
2005-02-05 22:40:08 -05:00
$link .= apply_filters ( 'list_cats' , $category -> cat_name , $category ) . '</a>' ;
2004-05-20 10:07:55 -04:00
if ( ( ! empty ( $feed_image )) || ( ! empty ( $feed )) ) {
$link .= ' ' ;
if ( empty ( $feed_image )) {
$link .= '(' ;
}
$link .= '<a href="' . get_category_rss_link ( 0 , $category -> cat_ID , $category -> category_nicename ) . '"' ;
if ( ! empty ( $feed ) ) {
2004-06-17 20:22:09 -04:00
$title = ' title="' . $feed . '"' ;
$alt = ' alt="' . $feed . '"' ;
$name = $feed ;
2004-05-20 10:07:55 -04:00
$link .= $title ;
}
$link .= '>' ;
if ( ! empty ( $feed_image )) {
2005-01-29 15:14:55 -05:00
$link .= " <img src=' $feed_image ' $alt $title " . ' />' ;
2004-05-20 10:07:55 -04:00
} else {
$link .= $name ;
}
$link .= '</a>' ;
if ( empty ( $feed_image )) {
$link .= ')' ;
}
}
2004-03-22 23:45:27 -05:00
2004-05-20 10:07:55 -04:00
if ( intval ( $optioncount ) == 1 ) {
$link .= ' (' . intval ( $category_posts [ " $category->cat_ID " ]) . ')' ;
}
2004-12-08 20:30:34 -05:00
if ( $optiondates ) {
if ( $optiondates == 1 ) $optiondates = 'Y-m-d' ;
$link .= ' ' . gmdate ( $optiondates , $category_timestamp [ " $category->cat_ID " ]);
2004-05-20 10:07:55 -04:00
}
if ( $list ) {
$thelist .= " \t <li> $link\n " ;
} else {
$thelist .= " \t $link <br /> \n " ;
}
2004-06-11 15:01:01 -04:00
if ( $hierarchical && $children ) $thelist .= list_cats ( $optionall , $all , $sort_column , $sort_order , $file , $list , $optiondates , $optioncount , $hide_empty , $use_desc_for_title , $hierarchical , $category -> cat_ID , $categories , 1 , $feed , $feed_image , $exclude , $hierarchical );
2004-05-20 10:07:55 -04:00
if ( $list ) $thelist .= " </li> \n " ;
}
}
if ( ! $num_found && ! $child_of ){
if ( $list ) {
$before = '<li>' ;
$after = '</li>' ;
}
echo $before . __ ( " No categories " ) . $after . " \n " ;
return ;
}
if ( $list && $child_of && $num_found && $recurse ) {
$pre = " \t \t <ul class='children'> " ;
$post = " \t \t </ul> \n " ;
} else {
2004-05-05 17:29:23 -04:00
$pre = $post = '' ;
}
2004-05-20 10:07:55 -04:00
$thelist = $pre . $thelist . $post ;
if ( $recurse ) {
return $thelist ;
}
echo apply_filters ( 'list_cats' , $thelist );
2004-01-27 04:58:01 -05:00
}
2004-05-18 04:18:38 -04:00
function in_category ( $category ) { // Check if the current post is in the given category
global $post , $category_cache ;
$cats = '' ;
foreach ( $category_cache [ $post -> ID ] as $cat ) :
2005-04-19 13:17:36 -04:00
$cats [] = $cat -> cat_ID ;
2004-05-18 04:18:38 -04:00
endforeach ;
if ( in_array ( $category , $cats ) )
return true ;
else
return false ;
}
2005-03-16 16:36:18 -05:00
?>