<?php
/*
Plugin Name: Alpha list_cats
Plugin URI: http://wordpress.org/support/topic/93405
Description: Version of list_cats that restricts by first letter of category name. Functions/Template Tags: szub_alpha_list_cats() and alpha_list_cats().
Version: R1
Author: Kaf Oseo
Author URI: http://szub.net/
Copyright (c) 2006 Kaf Oseo (http://szub.net)
Alpha list_cats is released under the GNU General Public License
(GPL) http://www.gnu.org/licenses/gpl.txt
This is a WordPress 2 plugin (http://wordpress.org).
*/
function szub_alpha_list_cats($args = '') {
parse_str($args, $r);
if ( !isset($r['optionall']))
$r['optionall'] = 0;
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;
if ( !isset($r['feed']) )
$r['feed'] = '';
if ( !isset($r['feed_image']) )
$r['feed_image'] = '';
if ( !isset($r['exclude']) )
$r['exclude'] = '';
if ( !isset($r['hierarchical']) )
$r['hierarchical'] = true;
if ( !isset($r['first_char']) )
$r['first_char'] = '';
return alpha_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'], $r['first_char']);
}
function alpha_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, $first_char = '') {
global $wpdb, $wp_query;
// Optiondates now works
if ( '' == $file )
$file = get_settings('home') . '/';
$exclusions = '';
if ( !empty($exclude) ) {
$excats = preg_split('/[\s,]+/',$exclude);
if ( count($excats) ) {
foreach ( $excats as $excat ) {
$exclusions .= ' AND cat_ID <> ' . intval($excat) . ' ';
}
}
}
$exclusions = apply_filters('list_cats_exclusions', $exclusions );
if ( $first_char ) {
$like_first_char = ' AND cat_name LIKE \'' . $first_char . '%\' ';
$sort_column = 'name';
}
if ( intval($categories) == 0 ) {
$sort_column = 'cat_'.$sort_column;
$query = "
SELECT cat_ID, cat_name, category_nicename, category_description, category_parent, category_count
FROM $wpdb->categories
WHERE cat_ID > 0 $like_first_char $exclusions
ORDER BY $sort_column $sort_order";
$categories = $wpdb->get_results($query);
}
if ( $optiondates ) {
$cat_dates = $wpdb->get_results(" SELECT category_id,
UNIX_TIMESTAMP( MAX(post_date) ) AS ts
FROM $wpdb->posts, $wpdb->post2cat, $wpdb->categories
WHERE post_status = 'publish' AND post_id = ID $exclusions
GROUP BY category_id");
foreach ( $cat_dates as $cat_date ) {
$category_timestamp["$cat_date->category_id"] = $cat_date->ts;
}
}
$num_found=0;
$thelist = "";
foreach ( (array) $categories as $category ) {
if ( ( intval($hide_empty) == 0 || $category->category_count) && (!$hierarchical || $category->category_parent == $child_of) ) {
$num_found++;
$link = '<a href="'.get_category_link($category->cat_ID).'" ';
if ( $use_desc_for_title == 0 || empty($category->category_description) )
$link .= 'title="'. sprintf(__("View all posts filed under %s"), wp_specialchars($category->cat_name)) . '"';
else
$link .= 'title="' . wp_specialchars(apply_filters('category_description',$category->category_description,$category)) . '"';
$link .= '>';
$link .= apply_filters('list_cats', $category->cat_name, $category).'</a>';
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) ) {
$title = ' title="' . $feed . '"';
$alt = ' alt="' . $feed . '"';
$name = $feed;
$link .= $title;
}
$link .= '>';
if ( !empty($feed_image) )
$link .= "<img src='$feed_image' $alt$title" . ' />';
else
$link .= $name;
$link .= '</a>';
if (empty($feed_image))
$link .= ')';
}
if ( intval($optioncount) == 1 )
$link .= ' ('.intval($category->category_count).')';
if ( $optiondates ) {
if ( $optiondates == 1 )
$optiondates = 'Y-m-d';
$link .= ' ' . gmdate($optiondates, $category_timestamp["$category->cat_ID"]);
}
if ( $list ) {
$thelist .= "\t<li";
if (($category->cat_ID == $wp_query->get_queried_object_id()) && is_category()) {
$thelist .= ' class="current-cat"';
}
$thelist .= ">$link\n";
} else {
$thelist .= "\t$link<br />\n";
}
if ($hierarchical && $children)
$thelist .= alpha_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, $first_char);
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 {
$pre = $post = '';
}
$thelist = $pre . $thelist . $post;
if ( $recurse )
return $thelist;
echo apply_filters('list_cats', $thelist);
}
?>