2004-01-27 04:58:01 -05:00
< ? php
function get_the_category () {
global $post , $tablecategories , $tablepost2cat , $wpdb , $category_cache ;
if ( $category_cache [ $post -> ID ]) {
return $category_cache [ $post -> ID ];
} else {
$categories = $wpdb -> get_results ( "
SELECT category_id , cat_name , category_nicename , category_description , category_parent
FROM $tablecategories , $tablepost2cat
WHERE $tablepost2cat . category_id = cat_ID AND $tablepost2cat . post_id = $post -> ID
" );
return $categories ;
}
}
function get_category_link ( $echo = false , $category_id , $category_nicename ) {
2004-02-26 11:15:48 -05:00
global $wpdb , $tablecategories , $post , $querystring_start , $querystring_equal , $cache_categories ;
2004-01-27 04:58:01 -05:00
$cat_ID = $category_id ;
$permalink_structure = get_settings ( 'permalink_structure' );
if ( '' == $permalink_structure ) {
2004-04-28 03:27:03 -04:00
$file = get_settings ( 'home' ) . '/' . get_settings ( 'blogfilename' );
2004-01-27 04:58:01 -05:00
$link = $file . $querystring_start . 'cat' . $querystring_equal . $cat_ID ;
} else {
2004-05-08 22:52:27 -04:00
$category_nicename = $cache_categories [ $category_id ] -> category_nicename ;
2004-05-05 03:34:41 -04:00
// Get any static stuff from the front
2004-01-27 04:58:01 -05:00
$front = substr ( $permalink_structure , 0 , strpos ( $permalink_structure , '%' ));
2004-05-08 22:52:27 -04:00
if ( '' == get_settings ( 'category_base' ) ) :
$link = get_settings ( 'home' ) . $front . 'category/' ;
else :
2004-05-05 03:59:51 -04:00
$link = get_settings ( 'home' ) . get_settings ( 'category_base' ) . '/' ;
2004-05-08 22:52:27 -04:00
endif ;
2004-01-27 04:58:01 -05:00
if ( $parent = $cache_categories [ $category_id ] -> category_parent ) $link .= get_category_parents ( $parent , FALSE , '/' , TRUE );
$link .= $category_nicename . '/' ;
}
if ( $echo ) echo $link ;
return $link ;
}
2004-02-05 15:55:50 -05:00
function get_category_rss_link ( $echo = false , $category_id , $category_nicename ) {
2004-02-26 11:15:48 -05:00
global $querystring_start , $querystring_equal ;
2004-02-05 15:55:50 -05:00
$cat_ID = $category_id ;
$permalink_structure = get_settings ( 'permalink_structure' );
if ( '' == $permalink_structure ) {
2004-02-26 11:15:48 -05:00
$file = get_settings ( 'siteurl' ) . '/wp-rss2.php' ;
2004-02-05 15:55:50 -05:00
$link = $file . $querystring_start . 'cat' . $querystring_equal . $category_id ;
} else {
$link = get_category_link ( 0 , $category_id , $category_nicename );
2004-03-19 11:20:49 -05:00
$link = $link . " feed/ " ;
2004-02-05 15:55:50 -05:00
}
if ( $echo ) echo $link ;
return $link ;
}
2004-01-27 04:58:01 -05:00
function the_category ( $seperator = '' , $parents = '' ) {
$categories = get_the_category ();
2004-05-09 12:34:03 -04:00
$thelist = '' ;
2004-01-27 04:58:01 -05:00
if ( '' == $seperator ) {
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 ) {
$category -> cat_name = stripslashes ( $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 );
}
$thelist .= '<a href="' . get_category_link ( 0 , $category -> category_id , $category -> category_nicename ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '">' . $category -> cat_name . '</a></li>' ;
2004-01-27 04:58:01 -05:00
break ;
case 'single' :
2004-05-09 12:34:03 -04:00
$thelist .= '<a href="' . get_category_link ( 0 , $category -> category_id , $category -> category_nicename ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '>' ;
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 :
2004-05-09 12:34:03 -04:00
$thelist .= '<a href="' . get_category_link ( 0 , $category -> category_id , $category -> category_nicename ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '">' . $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 ) {
$category -> cat_name = stripslashes ( $category -> cat_name );
2004-05-09 12:34:03 -04:00
if ( 0 < $i ) $thelist .= $seperator . ' ' ;
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 );
$thelist .= '<a href="' . get_category_link ( 0 , $category -> category_id , $category -> category_nicename ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '">' . $category -> cat_name . '</a>' ;
2004-01-27 04:58:01 -05:00
case 'single' :
2004-05-09 12:34:03 -04:00
$thelist .= '<a href="' . get_category_link ( 0 , $category -> category_id , $category -> category_nicename ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '">' ;
if ( $category -> category_parent ) $thelist .= get_category_parents ( $category -> category_parent , FALSE );
$thelist .= " $category->cat_name </a> " ;
2004-01-27 04:58:01 -05:00
case '' :
default :
2004-05-09 12:34:03 -04:00
$thelist .= '<a href="' . get_category_link ( 0 , $category -> category_id , $category -> category_nicename ) . '" title="' . sprintf ( __ ( " View all posts in %s " ), $category -> cat_name ) . '">' . $category -> cat_name . '</a>' ;
2004-01-27 04:58:01 -05:00
}
++ $i ;
}
}
2004-05-09 12:34:03 -04:00
echo apply_filters ( 'the_category' , $thelist );
2004-01-27 04:58:01 -05:00
}
function the_category_rss ( $type = 'rss' ) {
$categories = get_the_category ();
2004-05-09 12:34:03 -04:00
$the_list = '' ;
2004-01-27 04:58:01 -05:00
foreach ( $categories as $category ) {
$category -> cat_name = stripslashes ( convert_chars ( $category -> cat_name ));
if ( 'rdf' == $type ) {
2004-05-09 12:34:03 -04:00
$the_list .= " \n \t <dc:subject> $category->cat_name </dc:subject> " ;
2004-01-27 04:58:01 -05:00
} else {
2004-05-09 12:34:03 -04:00
$the_list .= " \n \t <category> $category->cat_name </category> " ;
2004-01-27 04:58:01 -05:00
}
}
2004-05-09 12:41:16 -04:00
echo apply_filters ( 'the_category_rss' , $the_list );
2004-01-27 04:58:01 -05:00
}
function get_the_category_by_ID ( $cat_ID ) {
2004-04-20 18:56:47 -04:00
global $tablecategories , $cache_categories , $wpdb ;
2004-04-20 19:03:09 -04:00
if ( ! $cache_categories [ $cat_ID ] ) {
2004-01-27 04:58:01 -05:00
$cat_name = $wpdb -> get_var ( " SELECT cat_name FROM $tablecategories WHERE cat_ID = ' $cat_ID ' " );
$cache_categories [ $cat_ID ] -> cat_name = $cat_name ;
} else {
$cat_name = $cache_categories [ $cat_ID ] -> cat_name ;
}
return ( stripslashes ( $cat_name ));
}
2004-02-16 23:56:29 -05:00
function get_category_parents ( $id , $link = FALSE , $separator = '/' , $nicename = FALSE ){
2004-01-27 04:58:01 -05:00
global $tablecategories , $cache_categories ;
$chain = " " ;
$parent = $cache_categories [ $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 ) {
2004-04-17 11:56:23 -04:00
$chain .= '<a href="' . get_category_link ( 0 , $parent -> cat_ID , $parent -> category_nicename ) . '" 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 = '' ) {
2004-01-27 04:58:01 -05:00
global $tablecategories , $cache_categories ;
2004-02-16 23:56:29 -05:00
$c_cache = $cache_categories ; // Can't do recursive foreach on a global, have to make a copy
$chain = '' ;
2004-01-27 04:58:01 -05:00
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-02-16 23:56:29 -05:00
function the_category_ID ( $echo = true ) {
2004-01-27 04:58:01 -05:00
global $post ;
if ( $echo )
echo $post -> post_category ;
else
return $post -> post_category ;
}
function the_category_head ( $before = '' , $after = '' ) {
global $post , $currentcat , $previouscat , $dateformat , $newday ;
$currentcat = $post -> post_category ;
if ( $currentcat != $previouscat ) {
echo $before ;
echo get_the_category_by_ID ( $currentcat );
echo $after ;
$previouscat = $currentcat ;
}
}
function category_description ( $category = 0 ) {
global $cat , $wpdb , $tablecategories , $cache_categories ;
if ( ! $category ) $category = $cat ;
$category_description = $cache_categories [ $category ] -> category_description ;
$category_description = apply_filters ( 'category_description' , $category_description );
return $category_description ;
}
// 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 ) {
global $tablecategories , $tableposts , $tablepost2cat , $wpdb ;
global $querystring_start , $querystring_equal , $querystring_separator ;
2004-04-28 03:27:03 -04:00
if (( $file == 'blah' ) || ( $file == '' )) $file = get_settings ( 'home' ) . '/' . get_settings ( 'blogfilename' );
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 ,
COUNT ( $tablepost2cat . post_id ) AS cat_count ,
DAYOFMONTH ( MAX ( post_date )) AS lastday , MONTH ( MAX ( post_date )) AS lastmonth
FROM $tablecategories LEFT JOIN $tablepost2cat ON ( cat_ID = category_id )
LEFT JOIN $tableposts ON ( ID = post_id )
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 );
echo " \t <option value='all'> $all </option> \n " ;
}
if ( intval ( $optionnone ) == 1 ) echo " \t <option value='0'>None</option> \n " ;
if ( $categories ) {
foreach ( $categories as $category ) {
$cat_name = apply_filters ( 'list_cats' , $category -> cat_name );
echo " \t <option value= \" " . $category -> cat_ID . " \" " ;
if ( $category -> cat_ID == $selected )
echo ' selected="selected"' ;
echo '>' ;
echo stripslashes ( $cat_name );
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-03-22 23:45:27 -05:00
2004-04-30 14:28:50 -04:00
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' ]);
2004-02-13 11:14:36 -05:00
}
2004-04-30 14:28:50 -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 = '' ) {
2004-04-27 20:03:58 -04:00
global $tablecategories , $tableposts , $tablepost2cat , $wpdb , $category_posts ;
2004-01-27 04:58:01 -05:00
global $querystring_start , $querystring_equal , $querystring_separator ;
// Optiondates now works
if ( '' == $file ) {
2004-04-28 03:27:03 -04:00
$file = get_settings ( 'home' ) . '/' . get_settings ( 'blogfilename' );
2004-01-27 04:58:01 -05: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 ) . ' ' ;
}
}
}
2004-01-27 04:58:01 -05:00
if ( intval ( $categories ) == 0 ){
$sort_column = 'cat_' . $sort_column ;
$query = "
SELECT cat_ID , cat_name , category_nicename , category_description , category_parent
FROM $tablecategories
2004-04-30 14:28:50 -04:00
WHERE cat_ID > 0 $exclusions
2004-01-27 04:58:01 -05:00
ORDER BY $sort_column $sort_order " ;
$categories = $wpdb -> get_results ( $query );
}
2004-04-27 20:03:58 -04:00
if ( intval ( $hide_empty ) == 1 && ! isset ( $category_posts )) {
2004-01-27 04:58:01 -05:00
$cat_counts = $wpdb -> get_results ( " SELECT cat_ID,
COUNT ( $tablepost2cat . post_id ) AS cat_count
2004-04-30 14:28:50 -04:00
FROM $tablecategories
LEFT JOIN $tablepost2cat ON ( cat_ID = category_id )
2004-01-27 04:58:01 -05:00
LEFT JOIN $tableposts ON ( ID = post_id )
2004-04-30 14:28:50 -04:00
WHERE 1 = 1 $exclusions
2004-01-27 04:58:01 -05:00
GROUP BY category_id " );
foreach ( $cat_counts as $cat_count ) {
$category_posts [ " $cat_count->cat_ID " ] = $cat_count -> cat_count ;
}
}
if ( intval ( $optiondates ) == 1 ) {
$cat_dates = $wpdb -> get_results ( " SELECT cat_ID,
DAYOFMONTH ( MAX ( post_date )) AS lastday , MONTH ( MAX ( post_date )) AS lastmonth
2004-04-30 14:28:50 -04:00
FROM $tablecategories
LEFT JOIN $tablepost2cat ON ( cat_ID = category_id )
2004-01-27 04:58:01 -05:00
LEFT JOIN $tableposts ON ( ID = post_id )
2004-04-30 14:28:50 -04:00
WHERE 1 = 1 $exclusions
2004-01-27 04:58:01 -05:00
GROUP BY category_id " );
foreach ( $cat_dates as $cat_date ) {
$category_lastday [ " $cat_date->cat_ID " ] = $cat_date -> lastday ;
$category_lastmonth [ " $cat_date->cat_ID " ] = $cat_date -> lastmonth ;
}
}
if ( intval ( $optionall ) == 1 && ! $child_of && $categories ) {
$all = apply_filters ( 'list_cats' , $all );
$link = " <a href= \" " . $file . $querystring_start . 'cat' . $querystring_equal . 'all">' . $all . " </a> " ;
if ( $list ) {
echo " \n \t <li> $link </li> " ;
} else {
echo " \t $link <br /> \n " ;
}
}
$num_found = 0 ;
$thelist = " " ;
foreach ( $categories as $category ) {
2004-05-05 17:29:23 -04:00
if (( intval ( $hide_empty ) == 0 || isset ( $category_posts [ " $category->cat_ID " ])) && ( ! $children || $category -> category_parent == $child_of )) {
2004-01-27 04:58:01 -05:00
$num_found ++ ;
$link = '<a href="' . get_category_link ( 0 , $category -> cat_ID , $category -> category_nicename ) . '" ' ;
if ( $use_desc_for_title == 0 || empty ( $category -> category_description )) {
2004-04-17 11:56:23 -04:00
$link .= 'title="' . sprintf ( __ ( " View all posts filed under %s " ), htmlspecialchars ( $category -> cat_name )) . '"' ;
2004-01-27 04:58:01 -05:00
} else {
$link .= 'title="' . htmlspecialchars ( $category -> category_description ) . '"' ;
}
$link .= '>' ;
$link .= stripslashes ( $category -> cat_name ) . '</a>' ;
2004-03-22 23:45:27 -05: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 ) . '"' ;
2004-04-20 19:03:09 -04:00
if ( ! empty ( $feed ) ) {
2004-03-22 23:45:27 -05:00
$title = ' title="' . stripslashes ( $feed ) . '"' ;
$alt = ' alt="' . stripslashes ( $feed ) . '"' ;
$name = stripslashes ( $feed );
$link .= $title ;
}
$link .= '>' ;
if ( ! empty ( $feed_image )) {
$link .= " <img src= \" $feed_image\ " border = \ " 0 \" $alt $title " . ' />' ;
} else {
$link .= $name ;
}
$link .= '</a>' ;
if ( empty ( $feed_image )) {
$link .= ')' ;
}
}
2004-01-27 04:58:01 -05:00
if ( intval ( $optioncount ) == 1 ) {
$link .= ' (' . intval ( $category_posts [ " $category->cat_ID " ]) . ')' ;
}
if ( intval ( $optiondates ) == 1 ) {
$link .= ' ' . $category_lastday [ " $category->cat_ID " ] . '/' . $category_lastmonth [ " $category->cat_ID " ];
}
if ( $list ) {
$thelist .= " \t <li> $link\n " ;
} else {
$thelist .= " \t $link <br /> \n " ;
}
2004-05-09 01:47:02 -04:00
if ( $children ) $thelist .= list_cats ( $optionall , $all , $sort_column , $sort_order , $file , $list , $optiondates , $optioncount , $hide_empty , $use_desc_for_title , $children , $category -> cat_ID , $categories , 1 , $feed , $feed_image , $exclude );
2004-01-27 04:58:01 -05:00
if ( $list ) $thelist .= " </li> \n " ;
}
}
if ( ! $num_found && ! $child_of ){
if ( $list ) {
$before = '<li>' ;
$after = '</li>' ;
}
2004-04-17 11:56:23 -04:00
echo $before . __ ( " No categories " ) . $after . " \n " ;
2004-01-27 04:58:01 -05:00
return ;
}
if ( $list && $child_of && $num_found && $recurse ) {
$pre = " \t \t <ul class='children'> " ;
$post = " \t \t </ul> \n " ;
2004-05-05 17:29:23 -04:00
} else {
$pre = $post = '' ;
}
$thelist = $pre . $thelist . $post ;
2004-01-27 04:58:01 -05:00
if ( $recurse ) {
return $thelist ;
}
2004-05-09 12:34:03 -04:00
echo apply_filters ( 'list_cats' , $thelist );
2004-01-27 04:58:01 -05:00
}
2004-02-16 23:56:29 -05:00
?>