Is there a widget that can display a certain Custom Post Type Terms?

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?

Related posts

Leave a Reply

1 comment

  1. 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'); 
    ?>