2

I am looking for a widget that a user can choose a Custom POst Type Term from a list. As an example I have a Custom Post Type called events and it has multiple categories. I want the user to be able to choose to show only posts from a certain category.

Does anyone know of one or know how I can make this please?

1 Answer 1

3

I have build, some time before a widget, Also you can set the number of posts, the category and the order!

<?php
/****** Widget ******/
class Artdev_Category_Posts extends WP_Widget {

    function Artdev_Category_Posts() {
        $widget_ops = array('description' => 'Add Selected Category Posts to the Sidebar' );
        parent::WP_Widget(false, __('&rarr; Category List', 'artdev'),$widget_ops);      
    }

    function widget($args, $instance) {  
        extract( $args );
        $title = esc_attr($instance['title']);
        $cat_name = esc_attr($instance['cat_name']);
        $posts = esc_attr($instance['posts']);
        $order = esc_attr($instance['order']);

        echo $before_widget; ?>

            <?php if ( $title ) echo $before_title . $title . $after_title; ?>

            <?php // The Loop
            $wq = new WP_Query();
            $wq->query( array( 'post_type' => 'events', 'category_name' => $cat_name, 'posts_per_page' => $posts, 'orderby' => $order )); 
            if( $wq->have_posts() ) :
            ?>
            <ul class="widgetlist">
                <?php while($wq->have_posts()) : $wq->the_post(); ?>
                    <li>
                        <h3><a href="<?php the_permalink(); ?>" rel="bookmark"><?php echo get_the_title(); ?></a></h3>
                    </li>
                <?php endwhile; ?>
            </ul>
            <?php endif; wp_reset_query(); ?>

            <?//php } ?>

       <?php echo $after_widget;
   }

   function update($new_instance, $old_instance) {                
       return $new_instance;
   }

   function form($instance) {        
        $title = esc_attr($instance['title']);
        $cat_name = esc_attr($instance['cat_name']);
        $posts = esc_attr($instance['posts']);
        $order = esc_attr($instance['order']);
        ?>

        <p><!-- Widget Title -->
            <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:','artdev'); ?></label>
            <input type="text" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $title; ?>" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" />
        </p>

        <p><!-- Category Name -->
            <label for="<?php echo $this->get_field_id('cat_name'); ?>"><?php _e('Category Name:','artdev'); ?></label>
            <input type="text" name="<?php echo $this->get_field_name('cat_name'); ?>" value="<?php echo $cat_name; ?>" id="<?php echo $this->get_field_id('cat_name'); ?>" class="widefat" />
        </p>

        <p><!-- Number Of Posts -->
            <label for="<?php echo $this->get_field_id('posts'); ?>"><?php _e('Number of posts to show:','artdev'); ?></label>
            <input type="text" name="<?php echo $this->get_field_name('posts'); ?>" id="<?php echo $this->get_field_id('posts'); ?>" value="<?php echo $posts; ?>" size="2" />
        </p>

        <p><!-- Order Posts -->
            <label for="<?php echo $this->get_field_id('order'); ?>"><?php _e('Order of posts:','artdev'); ?></label>
            <select name="<?php echo $this->get_field_name('order'); ?>">
                <option value="title" <?php if ($order == 'title') { echo 'selected="selected"'; } ?>>Order Posts by Title</option>
                <option value="ID" <?php if ($order == 'ID') { echo 'selected="selected"'; } ?>>Order Posts by ID</option>
                <option value="date" <?php if ($order == 'date') { echo 'selected="selected"'; } ?>>Order Posts by Date</option>
                <option value="rand" <?php if ($order == 'rand') { echo 'selected="selected"'; } ?>>Randomize Posts</option>
            </select>
        </p>

        <?php
    }
} 
register_widget('Artdev_Category_Posts'); 
?>
2
  • Many thanks for the code is there any way to allow the user to choose the category from a dropdown?
    – Lee
    Commented Dec 14, 2011 at 13:08
  • Yes @Lee, it's possible, when i have some time i will update the answer, but if you know how to do this, use the get_terms(). Take a look here also: wordpress.org/support/topic/…
    – Philip
    Commented Dec 14, 2011 at 13:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.