从wordpress分类列表的widget中移除某个分类的插件

WordPress的分类小工具会把所有的分类都显示出来,
有时候我们只想显示其中的几个分类,或者隐藏某个分类。
对于这种需求,可以使用wp_list_categories($args)这个模板标签来控制它。

例如只想显示ID为1、3、5的分类:
wp_list_categories('include=1,3,5');

不显示ID为2、4的分类且显示每个分类的日志数:
wp_list_categories('exclude=2,4&show_count=1');

详细说明请参考官方文档:
http://codex.wordpress.org/Template_Tags/wp_list_categories

由于某种原因,我不能直接在模板文件中使用wp_list_categories,
只好把它做成插件的形式使用,翻了下官方的API,
发现wp-includes/default-widgets.php中有个WP_Widget_Categories类是控制分类小工具输出的,
直接毫不犹豫的Copy出来修改wp_list_categories函数,按照插件机制,做成小插件。
以下是插件代码:(也可以从这里下载)

<?php
/*
* Plugin Name: Categories Widget Exclude ID
* Plugin URI: http://mimiz.cn
* Description: A simple plugin allow you remove some of the categories from categories widget.
* Author: Zhang Cheng
* Version: 0.1
* Author URI: http://mimiz.cn
*/
class limited_catagories_list_widget extends WP_Widget {

private $_exclude_id = ‘1’; // Categories ID, you want to remove.

function __construct() {
$widget_ops = array( ‘classname’ => ‘widget_categories’, ‘description’ => __( “A list or dropdown of categories” ) );
parent::__construct(‘categories’, __(‘Categories’), $widget_ops);
}

function widget( $args, $instance ) {
extract( $args );

$title = apply_filters(‘widget_title’, empty( $instance[‘title’] ) ? __( ‘Categories’ ) : $instance[‘title’], $instance, $this->id_base);
$c = ! empty( $instance[‘count’] ) ? ‘1’ : ‘0’;
$h = ! empty( $instance[‘hierarchical’] ) ? ‘1’ : ‘0’;
$d = ! empty( $instance[‘dropdown’] ) ? ‘1’ : ‘0’;

echo $before_widget;
if ( $title )
echo $before_title . $title . $after_title;

$cat_args = array(‘orderby’ => ‘name’, ‘show_count’ => $c, ‘hierarchical’ => $h);

if ( $d ) {
$cat_args[‘show_option_none’] = __(‘Select Category’);
wp_dropdown_categories(apply_filters(‘widget_categories_dropdown_args’, $cat_args));
?>

<script type=’text/javascript’>
/* <![CDATA[ */
var dropdown = document.getElementById(“cat”);
function onCatChange() {
if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
location.href = “<?php echo home_url(); ?>/?cat=”+dropdown.options[dropdown.selectedIndex].value;
}
}
dropdown.onchange = onCatChange;
/* ]]> */
</script>

<?php
} else {
?>
<ul>
<?php
$cat_args[‘title_li’] = ”;
$cat_args[‘exclude’] = $this->_exclude_id;
wp_list_categories(apply_filters(‘widget_categories_args’, $cat_args));
?>
</ul>
<?php
}

echo $after_widget;
}

function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance[‘title’] = strip_tags($new_instance[‘title’]);
$instance[‘count’] = !empty($new_instance[‘count’]) ? 1 : 0;
$instance[‘hierarchical’] = !empty($new_instance[‘hierarchical’]) ? 1 : 0;
$instance[‘dropdown’] = !empty($new_instance[‘dropdown’]) ? 1 : 0;

return $instance;
}

function form( $instance ) {
//Defaults
$instance = wp_parse_args( (array) $instance, array( ‘title’ => ”) );
$title = esc_attr( $instance[‘title’] );
$count = isset($instance[‘count’]) ? (bool) $instance[‘count’] :false;
$hierarchical = isset( $instance[‘hierarchical’] ) ? (bool) $instance[‘hierarchical’] : false;
$dropdown = isset( $instance[‘dropdown’] ) ? (bool) $instance[‘dropdown’] : false;
?>
<p><label for=”<?php echo $this->get_field_id(‘title’); ?>”><?php _e( ‘Title:’ ); ?></label>
<input class=”widefat” id=”<?php echo $this->get_field_id(‘title’); ?>” name=”<?php echo $this->get_field_name(‘title’); ?>” type=”text” value=”<?php echo $title; ?>” /></p>

<p><input type=”checkbox” class=”checkbox” id=”<?php echo $this->get_field_id(‘dropdown’); ?>” name=”<?php echo $this->get_field_name(‘dropdown’); ?>”<?php checked( $dropdown ); ?> />
<label for=”<?php echo $this->get_field_id(‘dropdown’); ?>”><?php _e( ‘Display as dropdown’ ); ?></label><br />

<input type=”checkbox” class=”checkbox” id=”<?php echo $this->get_field_id(‘count’); ?>” name=”<?php echo $this->get_field_name(‘count’); ?>”<?php checked( $count ); ?> />
<label for=”<?php echo $this->get_field_id(‘count’); ?>”><?php _e( ‘Show post counts’ ); ?></label><br />

<input type=”checkbox” class=”checkbox” id=”<?php echo $this->get_field_id(‘hierarchical’); ?>” name=”<?php echo $this->get_field_name(‘hierarchical’); ?>”<?php checked( $hierarchical ); ?> />
<label for=”<?php echo $this->get_field_id(‘hierarchical’); ?>”><?php _e( ‘Show hierarchy’ ); ?></label></p>
<?php
}

}

function register_category_exclude_widget(){
register_widget(‘limited_catagories_list_widget’);
}

add_action(‘widgets_init’, ‘register_category_exclude_widget’);

?>

TrackBack: http://mimiz.cn/index.php/wordpress/exclude-someone-from-categories-widget-for-wordpress-plugin/trackback/

Leave a Reply !

^_^您敢留下回复吗?