+ <input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php if (isset ( $instance['title'])) {echo esc_attr( $instance['title'] );} ?>" /></p>
+ <p><label for="<?php echo $this->get_field_id('taxonomy'); ?>"><?php _e('Taxonomy:') ?></label>
+ <select class="widefat" id="<?php echo $this->get_field_id('taxonomy'); ?>" name="<?php echo $this->get_field_name('taxonomy'); ?>">
+ <?php foreach ( get_taxonomies() as $taxonomy ) :
+ $tax = get_taxonomy($taxonomy);
+ if ( !$tax->show_tagcloud || empty($tax->labels->name) )
+ continue;
+ ?>
+ <option value="<?php echo esc_attr($taxonomy) ?>" <?php selected($taxonomy, $current_taxonomy) ?>><?php echo $tax->labels->name; ?></option>
+ <?php endforeach; ?>
+ </select></p><?php
+ }
+
+ function _get_current_taxonomy($instance) {
+ if ( !empty($instance['taxonomy']) && taxonomy_exists($instance['taxonomy']) )
+ return $instance['taxonomy'];
+
+ return 'post_tag';
+ }
+}
+
+/**
+ * Navigation Menu widget class
+ *
+ * @since 3.0.0
+ */
+ class WP_Nav_Menu_Widget extends WP_Widget {
+
+ function __construct() {
+ $widget_ops = array( 'description' => __('Use this widget to add one of your custom menus as a widget.') );
+ parent::__construct( 'nav_menu', __('Custom Menu'), $widget_ops );
+ }
+
+ function widget($args, $instance) {
+ // Get menu
+ $nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false;
+
+ if ( !$nav_menu )
+ return;
+
+ $instance['title'] = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base );
+
+ echo $args['before_widget'];
+
+ if ( !empty($instance['title']) )
+ echo $args['before_title'] . $instance['title'] . $args['after_title'];
+
+ wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $nav_menu ) );
+
+ echo $args['after_widget'];
+ }
+
+ function update( $new_instance, $old_instance ) {
+ $instance['title'] = strip_tags( stripslashes($new_instance['title']) );
+ $instance['nav_menu'] = (int) $new_instance['nav_menu'];
+ return $instance;
+ }
+
+ function form( $instance ) {
+ $title = isset( $instance['title'] ) ? $instance['title'] : '';
+ $nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : '';
+
+ // Get menus
+ $menus = get_terms( 'nav_menu', array( 'hide_empty' => false ) );
+
+ // If no menus exists, direct the user to go and create some.
+ if ( !$menus ) {
+ echo '<p>'. sprintf( __('No menus have been created yet. <a href="%s">Create some</a>.'), admin_url('nav-menus.php') ) .'</p>';
+ return;
+ }
+ ?>
+ <p>
+ <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:') ?></label>
+ <input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $title; ?>" />
+ </p>
+ <p>
+ <label for="<?php echo $this->get_field_id('nav_menu'); ?>"><?php _e('Select Menu:'); ?></label>
+ <select id="<?php echo $this->get_field_id('nav_menu'); ?>" name="<?php echo $this->get_field_name('nav_menu'); ?>">
+ <?php
+ foreach ( $menus as $menu ) {
+ echo '<option value="' . $menu->term_id . '"'
+ . selected( $nav_menu, $menu->term_id, false )
+ . '>'. $menu->name . '</option>';
+ }
+ ?>
+ </select>
+ </p>
+ <?php