Multiple selection for wordpress widget

I created my own category selection widget. So i used but i want to use with multiple attribute.

Here is my widget class. It works perfect without multiple attr. But i want to use it. And it must be return category ids in array.

<?php

class myCatWidget extends WP_Widget {

function myCatWidget() {
parent::WP_Widget( false, $name = ‘My cat widget’ );
}

function form( $instance ) {
$title = esc_attr( $instance[ ‘title’ ] );
$postCats = $instance[ ‘postCats’ ];
?>

<p>
<label for=”<?php echo $this->get_field_id( ‘title’ ); ?>”>Title</label>
<input type=”text” class=”widfat” id=”<?php echo $this->get_field_id( ‘title’ ); ?>” name=”<?php echo $this->get_field_name( ‘title’ ); ?>” style=”width: 100%;” value=”<?php echo $title; ?>”/>
</p>

<p>
<label for=”<?php echo $this->get_field_id( ‘postCats’ ); ?>”>Categories</label>
<select name=”<?php echo $this->get_field_name( ‘postCats’ ); ?>” id=”<?php echo $this->get_field_id( ‘postCats’ ); ?>” style=”width: 100%;” multiple>
<?php
$args = array(
‘taxonomy’ => ‘category’,
);

$terms = get_terms( $args );
foreach( $terms as $term ) { ?>
<option <?php selected( $instance[ ‘postCats’ ], $term->term_id ); ?> value=”<?php echo esc_attr( $term->term_id ); ?>”>
<?php echo esc_html( $term->name ); ?>
</option>
<?php } ?>
</select>
</p>

<?php

}

function update( $new_instance, $old_instance ) {
$instance = $old_instance;

$instance[ ‘title’ ] = strip_tags( $new_instance[ ‘title’ ] );
$instance[ ‘postCats’ ] = esc_sql( $new_instance[ ‘postCats’ ] );
return $instance;
}

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

$title = apply_filters( ‘widget_title’, $instance[ ‘title’ ] );
$postCats = $instance[ ‘postCats’ ];

echo $before_widget;

if( $title ) {
echo $before_title . $title . $after_title;
}

echo $postCats;

echo $after_widget;
}
}

add_action( ‘widgets_init’, create_function( ”, ‘return register_widget(“myCatWidget”);’ ) );

?>

Read more here:: Multiple selection for wordpress widget

Leave a Reply

Your email address will not be published. Required fields are marked *