Argument 'include' Not Working for Function wp_list_categories()
-
Hello All,
I may have uncovered a WP bug. Not sure. At any rate, I am creating a widget for my theme that’s a slightly modified version of the default WordPress categories widget. It is the same in every respect, except that it allows the user to select the categories that should appear in the widget.
The way in which I planned to do this was using the
'include'
argument for the functionwp_list_categories()
. However, despite my best efforts, I can’t get it to work. The variable stores correctly, butwp_list_categories()
returnsNo categories
for some reason that I don’t understand.I’ve included the code for the widget below. Please let me know what I’m missing, or if this is a legit WP bug.
Thanks!
Wyatt
Widget Code:
class WP_Widget_Selected_Categories extends WP_Widget { public function __construct() { $widget_ops = array( 'classname' => 'widget_selected_categories', 'description' => __( "A list or dropdown of selected categories." ) ); parent::__construct('selected_categories', __('Selected Categories'), $widget_ops); } public function widget( $args, $instance ) { /** This filter is documented in wp-includes/default-widgets.php */ $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Selected 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'; $i = ! empty( $instance['include'] ) ? $instance['include'] : ''; echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } $cat_args = array('orderby' => 'name', 'show_count' => $c, 'include' => $i, 'hierarchical' => $h); if ( $d ) { $cat_args['show_option_none'] = __('Select Category'); /** * Filter the arguments for the Categories widget drop-down. * * @since 2.8.0 * * @see wp_dropdown_categories() * * @param array $cat_args An array of Categories widget drop-down arguments. */ 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'] = ''; /** * Filter the arguments for the Categories widget. * * @since 2.8.0 * * @param array $cat_args An array of Categories widget options. */ wp_list_categories( $cat_args ); ?> </ul> <?php } echo $args['after_widget']; } public 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; $instance['include'] = ''; if( !empty( $new_instance['include'] && is_array( $new_instance['include'] ) ) ): sort( $new_instance['include'] ); $count = sizeof( $new_instance['include'] ); $i = 0; foreach( $new_instance['include'] as $cat_ID ): if( $i < ( $count - 1 ) ) { $include .= $cat_ID . ','; } else { $include .= $cat_ID; } $i++; endforeach; $instance['include'] = $include; endif; return $instance; } public 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; $include = isset( $instance['include'] ) ? $instance['include'] : ''; $included_cats = explode( ',', $include ); $args = array( 'hide_empty' => 0 ); $categories = get_categories( $args ); ?> <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><label for="<?php echo $this->get_field_id('include'); ?>"><?php _e( 'Categories:' ); ?></label><br /> <?php $i = 0; ?> <?php foreach( $categories as $category ): ?> <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('include') . '[' . $i . ']'; ?>" name="<?php echo $this->get_field_name('include') . '[' . $i . ']'; ?>" value="<?php echo $category->cat_ID; ?>"<?php if( in_array( $category->cat_ID, $included_cats ) ) echo ' checked="checked"'; ?> /> <label for="<?php echo $this->get_field_id('include') . '[' . $category->cat_ID . ']'; ?>"><?php echo $category->name; ?></label><br /> <?php $i++; ?> <?php endforeach; ?></p> <hr /> <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 } } add_action( 'widgets_init', function(){ register_widget( 'WP_Widget_Selected_Categories' ); });
- The topic ‘Argument 'include' Not Working for Function wp_list_categories()’ is closed to new replies.