X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/699231ae09f7057a4d0000cdf32e50a3df6a04ca..dc1231b7312fbdca99e9e887cc2bb35a28f85cdc:/wp-includes/default-widgets.php diff --git a/wp-includes/default-widgets.php b/wp-includes/default-widgets.php index 47e06860..48a39179 100644 --- a/wp-includes/default-widgets.php +++ b/wp-includes/default-widgets.php @@ -1,5 +1,4 @@ 'widget_pages', 'description' => __( 'Your site’s WordPress Pages') ); - $this->WP_Widget('pages', __('Pages'), $widget_ops); + public function __construct() { + $widget_ops = array('classname' => 'widget_pages', 'description' => __( 'A list of your site’s Pages.') ); + parent::__construct('pages', __('Pages'), $widget_ops); } - function widget( $args, $instance ) { - extract( $args ); + /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { + + /** + * Filter the widget title. + * + * @since 2.6.0 + * + * @param string $title The widget title. Default 'Pages'. + * @param array $instance An array of the widget's settings. + * @param mixed $id_base The widget ID. + */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Pages' ) : $instance['title'], $instance, $this->id_base ); - $title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Pages' ) : $instance['title'], $instance, $this->id_base); $sortby = empty( $instance['sortby'] ) ? 'menu_order' : $instance['sortby']; $exclude = empty( $instance['exclude'] ) ? '' : $instance['exclude']; if ( $sortby == 'menu_order' ) $sortby = 'menu_order, post_title'; - $out = wp_list_pages( apply_filters('widget_pages_args', array('title_li' => '', 'echo' => 0, 'sort_column' => $sortby, 'exclude' => $exclude) ) ); - - if ( !empty( $out ) ) { - echo $before_widget; - if ( $title) - echo $before_title . $title . $after_title; + /** + * Filter the arguments for the Pages widget. + * + * @since 2.8.0 + * + * @see wp_list_pages() + * + * @param array $args An array of arguments to retrieve the pages list. + */ + $out = wp_list_pages( apply_filters( 'widget_pages_args', array( + 'title_li' => '', + 'echo' => 0, + 'sort_column' => $sortby, + 'exclude' => $exclude + ) ) ); + + if ( ! empty( $out ) ) { + echo $args['before_widget']; + if ( $title ) { + echo $args['before_title'] . $title . $args['after_title']; + } ?> 'post_title', 'title' => '', 'exclude' => '') ); $title = esc_attr( $instance['title'] ); @@ -90,66 +125,101 @@ class WP_Widget_Pages extends WP_Widget { */ class WP_Widget_Links extends WP_Widget { - function WP_Widget_Links() { + public function __construct() { $widget_ops = array('description' => __( "Your blogroll" ) ); - $this->WP_Widget('links', __('Links'), $widget_ops); + parent::__construct('links', __('Links'), $widget_ops); } - function widget( $args, $instance ) { - extract($args, EXTR_SKIP); - + /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { $show_description = isset($instance['description']) ? $instance['description'] : false; $show_name = isset($instance['name']) ? $instance['name'] : false; $show_rating = isset($instance['rating']) ? $instance['rating'] : false; $show_images = isset($instance['images']) ? $instance['images'] : true; $category = isset($instance['category']) ? $instance['category'] : false; - - if ( is_admin() && !$category ) { - // Display All Links widget as such in the widgets screen - echo $before_widget . $before_title. __('All Links') . $after_title . $after_widget; - return; - } - - $before_widget = preg_replace('/id="[^"]*"/','id="%id"', $before_widget); - wp_list_bookmarks(apply_filters('widget_links_args', array( - 'title_before' => $before_title, 'title_after' => $after_title, - 'category_before' => $before_widget, 'category_after' => $after_widget, + $orderby = isset( $instance['orderby'] ) ? $instance['orderby'] : 'name'; + $order = $orderby == 'rating' ? 'DESC' : 'ASC'; + $limit = isset( $instance['limit'] ) ? $instance['limit'] : -1; + + $before_widget = preg_replace( '/id="[^"]*"/', 'id="%id"', $args['before_widget'] ); + + /** + * Filter the arguments for the Links widget. + * + * @since 2.6.0 + * + * @see wp_list_bookmarks() + * + * @param array $args An array of arguments to retrieve the links list. + */ + wp_list_bookmarks( apply_filters( 'widget_links_args', array( + 'title_before' => $args['before_title'], 'title_after' => $args['after_title'], + 'category_before' => $before_widget, 'category_after' => $args['after_widget'], 'show_images' => $show_images, 'show_description' => $show_description, 'show_name' => $show_name, 'show_rating' => $show_rating, - 'category' => $category, 'class' => 'linkcat widget' - ))); + 'category' => $category, 'class' => 'linkcat widget', + 'orderby' => $orderby, 'order' => $order, + 'limit' => $limit, + ) ) ); } - function update( $new_instance, $old_instance ) { + /** + * @param array $new_instance + * @param array $old_instance + * @return array + */ + public function update( $new_instance, $old_instance ) { $new_instance = (array) $new_instance; - $instance = array( 'images' => 0, 'name' => 0, 'description' => 0, 'rating' => 0); + $instance = array( 'images' => 0, 'name' => 0, 'description' => 0, 'rating' => 0 ); foreach ( $instance as $field => $val ) { if ( isset($new_instance[$field]) ) $instance[$field] = 1; } - $instance['category'] = intval($new_instance['category']); + + $instance['orderby'] = 'name'; + if ( in_array( $new_instance['orderby'], array( 'name', 'rating', 'id', 'rand' ) ) ) + $instance['orderby'] = $new_instance['orderby']; + + $instance['category'] = intval( $new_instance['category'] ); + $instance['limit'] = ! empty( $new_instance['limit'] ) ? intval( $new_instance['limit'] ) : -1; return $instance; } - function form( $instance ) { + /** + * @param array $instance + */ + public function form( $instance ) { //Defaults - $instance = wp_parse_args( (array) $instance, array( 'images' => true, 'name' => true, 'description' => false, 'rating' => false, 'category' => false ) ); - $link_cats = get_terms( 'link_category'); + $instance = wp_parse_args( (array) $instance, array( 'images' => true, 'name' => true, 'description' => false, 'rating' => false, 'category' => false, 'orderby' => 'name', 'limit' => -1 ) ); + $link_cats = get_terms( 'link_category' ); + if ( ! $limit = intval( $instance['limit'] ) ) + $limit = -1; ?>

- +

+ + + +

id="get_field_id('images'); ?>" name="get_field_name('images'); ?>" />
@@ -160,6 +230,10 @@ class WP_Widget_Links extends WP_Widget { id="get_field_id('rating'); ?>" name="get_field_name('rating'); ?>" />

+

+ + +

'widget_search', 'description' => __( "A search form for your site") ); - $this->WP_Widget('search', __('Search'), $widget_ops); + public function __construct() { + $widget_ops = array('classname' => 'widget_search', 'description' => __( "A search form for your site.") ); + parent::__construct( 'search', _x( 'Search', 'Search widget' ), $widget_ops ); } - function widget( $args, $instance ) { - extract($args); - $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base); + /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); - echo $before_widget; - if ( $title ) - echo $before_title . $title . $after_title; + echo $args['before_widget']; + if ( $title ) { + echo $args['before_title'] . $title . $args['after_title']; + } // Use current theme search form if it exists get_search_form(); - echo $after_widget; + echo $args['after_widget']; } - function form( $instance ) { + /** + * @param array $instance + */ + public function form( $instance ) { $instance = wp_parse_args( (array) $instance, array( 'title' => '') ); $title = $instance['title']; ?> @@ -198,7 +280,12 @@ class WP_Widget_Search extends WP_Widget { '')); $instance['title'] = strip_tags($new_instance['title']); @@ -214,37 +301,103 @@ class WP_Widget_Search extends WP_Widget { */ class WP_Widget_Archives extends WP_Widget { - function WP_Widget_Archives() { - $widget_ops = array('classname' => 'widget_archive', 'description' => __( 'A monthly archive of your site’s posts') ); - $this->WP_Widget('archives', __('Archives'), $widget_ops); + public function __construct() { + $widget_ops = array('classname' => 'widget_archive', 'description' => __( 'A monthly archive of your site’s Posts.') ); + parent::__construct('archives', __('Archives'), $widget_ops); } - function widget( $args, $instance ) { - extract($args); - $c = $instance['count'] ? '1' : '0'; - $d = $instance['dropdown'] ? '1' : '0'; - $title = apply_filters('widget_title', empty($instance['title']) ? __('Archives') : $instance['title'], $instance, $this->id_base); + /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { + $c = ! empty( $instance['count'] ) ? '1' : '0'; + $d = ! empty( $instance['dropdown'] ) ? '1' : '0'; - echo $before_widget; - if ( $title ) - echo $before_title . $title . $after_title; + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Archives' ) : $instance['title'], $instance, $this->id_base ); + + echo $args['before_widget']; + if ( $title ) { + echo $args['before_title'] . $title . $args['after_title']; + } if ( $d ) { + $dropdown_id = "{$this->id_base}-dropdown-{$this->number}"; ?> - + + '', 'count' => 0, 'dropdown' => '') ); $instance['title'] = strip_tags($new_instance['title']); @@ -254,7 +407,10 @@ class WP_Widget_Archives extends WP_Widget { return $instance; } - function form( $instance ) { + /** + * @param array $instance + */ + public function form( $instance ) { $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'count' => 0, 'dropdown' => '') ); $title = strip_tags($instance['title']); $count = $instance['count'] ? 'checked="checked"' : ''; @@ -262,9 +418,9 @@ class WP_Widget_Archives extends WP_Widget { ?>

+ id="get_field_id('dropdown'); ?>" name="get_field_name('dropdown'); ?>" /> +
id="get_field_id('count'); ?>" name="get_field_name('count'); ?>" /> -
- id="get_field_id('dropdown'); ?>" name="get_field_name('dropdown'); ?>" />

'widget_meta', 'description' => __( "Log in/out, admin, feed and WordPress links") ); - $this->WP_Widget('meta', __('Meta'), $widget_ops); + public function __construct() { + $widget_ops = array('classname' => 'widget_meta', 'description' => __( "Login, RSS, & WordPress.org links.") ); + parent::__construct('meta', __('Meta'), $widget_ops); } - function widget( $args, $instance ) { - extract($args); - $title = apply_filters('widget_title', empty($instance['title']) ? __('Meta') : $instance['title'], $instance, $this->id_base); + /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty($instance['title']) ? __( 'Meta' ) : $instance['title'], $instance, $this->id_base ); - echo $before_widget; - if ( $title ) - echo $before_title . $title . $after_title; + echo $args['before_widget']; + if ( $title ) { + echo $args['before_title'] . $title . $args['after_title']; + } ?> '' ) ); $title = strip_tags($instance['title']); ?> @@ -327,31 +510,45 @@ class WP_Widget_Meta extends WP_Widget { */ class WP_Widget_Calendar extends WP_Widget { - function WP_Widget_Calendar() { - $widget_ops = array('classname' => 'widget_calendar', 'description' => __( 'A calendar of your site’s posts') ); - $this->WP_Widget('calendar', __('Calendar'), $widget_ops); + public function __construct() { + $widget_ops = array('classname' => 'widget_calendar', 'description' => __( 'A calendar of your site’s Posts.') ); + parent::__construct('calendar', __('Calendar'), $widget_ops); } - function widget( $args, $instance ) { - extract($args); - $title = apply_filters('widget_title', empty($instance['title']) ? ' ' : $instance['title'], $instance, $this->id_base); - echo $before_widget; - if ( $title ) - echo $before_title . $title . $after_title; + /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); + + echo $args['before_widget']; + if ( $title ) { + echo $args['before_title'] . $title . $args['after_title']; + } echo '
'; get_calendar(); echo '
'; - echo $after_widget; + echo $args['after_widget']; } - function update( $new_instance, $old_instance ) { + /** + * @param array $new_instance + * @param array $old_instance + * @return array + */ + public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags($new_instance['title']); return $instance; } - function form( $instance ) { + /** + * @param array $instance + */ + public function form( $instance ) { $instance = wp_parse_args( (array) $instance, array( 'title' => '' ) ); $title = strip_tags($instance['title']); ?> @@ -368,43 +565,67 @@ class WP_Widget_Calendar extends WP_Widget { */ class WP_Widget_Text extends WP_Widget { - function WP_Widget_Text() { - $widget_ops = array('classname' => 'widget_text', 'description' => __('Arbitrary text or HTML')); + public function __construct() { + $widget_ops = array('classname' => 'widget_text', 'description' => __('Arbitrary text or HTML.')); $control_ops = array('width' => 400, 'height' => 350); - $this->WP_Widget('text', __('Text'), $widget_ops, $control_ops); + parent::__construct('text', __('Text'), $widget_ops, $control_ops); } - function widget( $args, $instance ) { - extract($args); - $title = apply_filters( 'widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base); - $text = apply_filters( 'widget_text', $instance['text'], $instance ); - echo $before_widget; - if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?> -
+ /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); + + /** + * Filter the content of the Text widget. + * + * @since 2.3.0 + * + * @param string $widget_text The widget content. + * @param WP_Widget $instance WP_Widget instance. + */ + $text = apply_filters( 'widget_text', empty( $instance['text'] ) ? '' : $instance['text'], $instance ); + echo $args['before_widget']; + if ( ! empty( $title ) ) { + echo $args['before_title'] . $title . $args['after_title']; + } ?> +
'', 'text' => '' ) ); $title = strip_tags($instance['title']); - $text = format_to_edit($instance['text']); + $text = esc_textarea($instance['text']); ?>

- +

+

/> 

'widget_categories', 'description' => __( "A list or dropdown of categories" ) ); - $this->WP_Widget('categories', __('Categories'), $widget_ops); + public function __construct() { + $widget_ops = array( 'classname' => 'widget_categories', 'description' => __( "A list or dropdown of categories." ) ); + parent::__construct('categories', __('Categories'), $widget_ops); } - function widget( $args, $instance ) { - extract( $args ); + /** + * @staticvar bool $first_dropdown + * + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { + static $first_dropdown = true; - $title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Categories' ) : $instance['title'], $instance, $this->id_base); - $c = $instance['count'] ? '1' : '0'; - $h = $instance['hierarchical'] ? '1' : '0'; - $d = $instance['dropdown'] ? '1' : '0'; + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Categories' ) : $instance['title'], $instance, $this->id_base ); - echo $before_widget; - if ( $title ) - echo $before_title . $title . $after_title; + $c = ! empty( $instance['count'] ) ? '1' : '0'; + $h = ! empty( $instance['hierarchical'] ) ? '1' : '0'; + $d = ! empty( $instance['dropdown'] ) ? '1' : '0'; + + echo $args['before_widget']; + if ( $title ) { + echo $args['before_title'] . $title . $args['after_title']; + } - $cat_args = array('orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h); + $cat_args = array( + 'orderby' => 'name', + 'show_count' => $c, + 'hierarchical' => $h + ); if ( $d ) { - $cat_args['show_option_none'] = __('Select Category'); - wp_dropdown_categories(apply_filters('widget_categories_dropdown_args', $cat_args)); + $dropdown_id = ( $first_dropdown ) ? 'cat' : "{$this->id_base}-dropdown-{$this->number}"; + $first_dropdown = false; + + echo ''; + + $cat_args['show_option_none'] = __( 'Select Category' ); + $cat_args['id'] = $dropdown_id; + + /** + * 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 ) ); ?> @@ -460,16 +712,29 @@ class WP_Widget_Categories extends WP_Widget { '') ); $title = esc_attr( $instance['title'] ); @@ -491,7 +759,7 @@ class WP_Widget_Categories extends WP_Widget {

/> -
+
/>
@@ -510,63 +778,108 @@ class WP_Widget_Categories extends WP_Widget { */ class WP_Widget_Recent_Posts extends WP_Widget { - function WP_Widget_Recent_Posts() { - $widget_ops = array('classname' => 'widget_recent_entries', 'description' => __( "The most recent posts on your site") ); - $this->WP_Widget('recent-posts', __('Recent Posts'), $widget_ops); + public function __construct() { + $widget_ops = array('classname' => 'widget_recent_entries', 'description' => __( "Your site’s most recent Posts.") ); + parent::__construct('recent-posts', __('Recent Posts'), $widget_ops); $this->alt_option_name = 'widget_recent_entries'; - add_action( 'save_post', array(&$this, 'flush_widget_cache') ); - add_action( 'deleted_post', array(&$this, 'flush_widget_cache') ); - add_action( 'switch_theme', array(&$this, 'flush_widget_cache') ); + add_action( 'save_post', array($this, 'flush_widget_cache') ); + add_action( 'deleted_post', array($this, 'flush_widget_cache') ); + add_action( 'switch_theme', array($this, 'flush_widget_cache') ); } - function widget($args, $instance) { - $cache = wp_cache_get('widget_recent_posts', 'widget'); + /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { + $cache = array(); + if ( ! $this->is_preview() ) { + $cache = wp_cache_get( 'widget_recent_posts', 'widget' ); + } - if ( !is_array($cache) ) + if ( ! is_array( $cache ) ) { $cache = array(); + } + + if ( ! isset( $args['widget_id'] ) ) { + $args['widget_id'] = $this->id; + } - if ( isset($cache[$args['widget_id']]) ) { - echo $cache[$args['widget_id']]; + if ( isset( $cache[ $args['widget_id'] ] ) ) { + echo $cache[ $args['widget_id'] ]; return; } ob_start(); - extract($args); - $title = apply_filters('widget_title', empty($instance['title']) ? __('Recent Posts') : $instance['title'], $instance, $this->id_base); - if ( !$number = (int) $instance['number'] ) - $number = 10; - else if ( $number < 1 ) - $number = 1; - else if ( $number > 15 ) - $number = 15; + $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' ); + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + + $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5; + if ( ! $number ) + $number = 5; + $show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false; + + /** + * Filter the arguments for the Recent Posts widget. + * + * @since 3.4.0 + * + * @see WP_Query::get_posts() + * + * @param array $args An array of arguments used to retrieve the recent posts. + */ + $r = new WP_Query( apply_filters( 'widget_posts_args', array( + 'posts_per_page' => $number, + 'no_found_rows' => true, + 'post_status' => 'publish', + 'ignore_sticky_posts' => true + ) ) ); - $r = new WP_Query(array('showposts' => $number, 'nopaging' => 0, 'post_status' => 'publish', 'caller_get_posts' => 1)); if ($r->have_posts()) : ?> - - + +

- + is_preview() ) { + $cache[ $args['widget_id'] ] = ob_get_flush(); + wp_cache_set( 'widget_recent_posts', $cache, 'widget' ); + } else { + ob_end_flush(); + } } - function update( $new_instance, $old_instance ) { + /** + * @param array $new_instance + * @param array $old_instance + * @return array + */ + public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags($new_instance['title']); $instance['number'] = (int) $new_instance['number']; + $instance['show_date'] = isset( $new_instance['show_date'] ) ? (bool) $new_instance['show_date'] : false; $this->flush_widget_cache(); $alloptions = wp_cache_get( 'alloptions', 'options' ); @@ -576,20 +889,29 @@ class WP_Widget_Recent_Posts extends WP_Widget { return $instance; } - function flush_widget_cache() { + /** + * @access public + */ + public function flush_widget_cache() { wp_cache_delete('widget_recent_posts', 'widget'); } - function form( $instance ) { - $title = isset($instance['title']) ? esc_attr($instance['title']) : ''; - if ( !isset($instance['number']) || !$number = (int) $instance['number'] ) - $number = 5; + /** + * @param array $instance + */ + public function form( $instance ) { + $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; + $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; + $show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : false; ?> -

-

+

+

+ +

+

-

-

+

id="get_field_id( 'show_date' ); ?>" name="get_field_name( 'show_date' ); ?>" /> +

'widget_recent_comments', 'description' => __( 'The most recent comments' ) ); - $this->WP_Widget('recent-comments', __('Recent Comments'), $widget_ops); + public function __construct() { + $widget_ops = array('classname' => 'widget_recent_comments', 'description' => __( 'Your site’s most recent comments.' ) ); + parent::__construct('recent-comments', __('Recent Comments'), $widget_ops); $this->alt_option_name = 'widget_recent_comments'; if ( is_active_widget(false, false, $this->id_base) ) - add_action( 'wp_head', array(&$this, 'recent_comments_style') ); + add_action( 'wp_head', array($this, 'recent_comments_style') ); - add_action( 'comment_post', array(&$this, 'flush_widget_cache') ); - add_action( 'transition_comment_status', array(&$this, 'flush_widget_cache') ); + add_action( 'comment_post', array($this, 'flush_widget_cache') ); + add_action( 'edit_comment', array($this, 'flush_widget_cache') ); + add_action( 'transition_comment_status', array($this, 'flush_widget_cache') ); } - function recent_comments_style() { ?> + /** + * @access public + */ + public function recent_comments_style() { + /** + * Filter the Recent Comments default widget styles. + * + * @since 3.1.0 + * + * @param bool $active Whether the widget is active. Default true. + * @param string $id_base The widget ID. + */ + if ( ! current_theme_supports( 'widgets' ) // Temp hack #14876 + || ! apply_filters( 'show_recent_comments_widget_style', true, $this->id_base ) ) + return; + ?> is_preview() ) { + $cache = wp_cache_get('widget_recent_comments', 'widget'); + } + if ( ! is_array( $cache ) ) { $cache = array(); + } - if ( isset( $cache[$args['widget_id']] ) ) { - echo $cache[$args['widget_id']]; + if ( ! isset( $args['widget_id'] ) ) + $args['widget_id'] = $this->id; + + if ( isset( $cache[ $args['widget_id'] ] ) ) { + echo $cache[ $args['widget_id'] ]; return; } - extract($args, EXTR_SKIP); - $output = ''; - $title = apply_filters('widget_title', empty($instance['title']) ? __('Recent Comments') : $instance['title']); + $output = ''; - if ( ! $number = (int) $instance['number'] ) - $number = 5; - else if ( $number < 1 ) - $number = 1; + $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Comments' ); - $comments = get_comments( array( 'number' => $number, 'status' => 'approve' ) ); - $output .= $before_widget; - if ( $title ) - $output .= $before_title . $title . $after_title; + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + + $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5; + if ( ! $number ) + $number = 5; + + /** + * Filter the arguments for the Recent Comments widget. + * + * @since 3.4.0 + * + * @see WP_Comment_Query::query() for information on accepted arguments. + * + * @param array $comment_args An array of arguments used to retrieve the recent comments. + */ + $comments = get_comments( apply_filters( 'widget_comments_args', array( + 'number' => $number, + 'status' => 'approve', + 'post_status' => 'publish' + ) ) ); + + $output .= $args['before_widget']; + if ( $title ) { + $output .= $args['before_title'] . $title . $args['after_title']; + } $output .= ''; - $output .= $after_widget; + $output .= $args['after_widget']; echo $output; - $cache[$args['widget_id']] = $output; - wp_cache_set('widget_recent_comments', $cache, 'widget'); + + if ( ! $this->is_preview() ) { + $cache[ $args['widget_id'] ] = $output; + wp_cache_set( 'widget_recent_comments', $cache, 'widget' ); + } } - function update( $new_instance, $old_instance ) { + /** + * @param array $new_instance + * @param array $old_instance + * @return array + */ + public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags($new_instance['title']); - $instance['number'] = (int) $new_instance['number']; + $instance['number'] = absint( $new_instance['number'] ); $this->flush_widget_cache(); $alloptions = wp_cache_get( 'alloptions', 'options' ); @@ -676,15 +1065,18 @@ class WP_Widget_Recent_Comments extends WP_Widget { return $instance; } - function form( $instance ) { - $title = isset($instance['title']) ? esc_attr($instance['title']) : ''; - $number = isset($instance['number']) ? absint($instance['number']) : 5; + /** + * @param array $instance + */ + public function form( $instance ) { + $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; + $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; ?> -

-

+

+

-

-

+

+

__('Entries from any RSS or Atom feed') ); + public function __construct() { + $widget_ops = array( 'description' => __('Entries from any RSS or Atom feed.') ); $control_ops = array( 'width' => 400, 'height' => 200 ); - $this->WP_Widget( 'rss', __('RSS'), $widget_ops, $control_ops ); + parent::__construct( 'rss', __('RSS'), $widget_ops, $control_ops ); } - function widget($args, $instance) { - + /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { if ( isset($instance['error']) && $instance['error'] ) return; - extract($args, EXTR_SKIP); - - $url = $instance['url']; + $url = ! empty( $instance['url'] ) ? $instance['url'] : ''; while ( stristr($url, 'http') != $url ) $url = substr($url, 1); if ( empty($url) ) return; + // self-url destruction sequence + if ( in_array( untrailingslashit( $url ), array( site_url(), home_url() ) ) ) + return; + $rss = fetch_feed($url); $title = $instance['title']; $desc = ''; @@ -733,32 +1130,43 @@ class WP_Widget_RSS extends WP_Widget { if ( empty($title) ) $title = empty($desc) ? __('Unknown Feed') : $desc; - $title = apply_filters('widget_title', $title, $instance, $this->id_base); + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + $url = esc_url(strip_tags($url)); $icon = includes_url('images/rss.png'); if ( $title ) - $title = "RSS $title"; + $title = "RSS $title"; - echo $before_widget; - if ( $title ) - echo $before_title . $title . $after_title; + echo $args['before_widget']; + if ( $title ) { + echo $args['before_title'] . $title . $args['after_title']; + } wp_widget_rss_output( $rss, $instance ); - echo $after_widget; + echo $args['after_widget']; if ( ! is_wp_error($rss) ) $rss->__destruct(); unset($rss); } - function update($new_instance, $old_instance) { - $testurl = ( isset($new_instance['url']) && ($new_instance['url'] != $old_instance['url']) ); + /** + * @param array $new_instance + * @param array $old_instance + * @return array + */ + public function update( $new_instance, $old_instance ) { + $testurl = ( isset( $new_instance['url'] ) && ( !isset( $old_instance['url'] ) || ( $new_instance['url'] != $old_instance['url'] ) ) ); return wp_widget_rss_process( $new_instance, $testurl ); } - function form($instance) { - - if ( empty($instance) ) + /** + * @param array $instance + */ + public function form( $instance ) { + if ( empty( $instance ) ) { $instance = array( 'title' => '', 'url' => '', 'items' => 10, 'error' => false, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0 ); + } $instance['number'] = $this->number; wp_widget_rss_form( $instance ); @@ -789,60 +1197,57 @@ function wp_widget_rss_output( $rss, $args = array() ) { return; } - $default_args = array( 'show_author' => 0, 'show_date' => 0, 'show_summary' => 0 ); + $default_args = array( 'show_author' => 0, 'show_date' => 0, 'show_summary' => 0, 'items' => 0 ); $args = wp_parse_args( $args, $default_args ); - extract( $args, EXTR_SKIP ); - $items = (int) $items; + $items = (int) $args['items']; if ( $items < 1 || 20 < $items ) $items = 10; - $show_summary = (int) $show_summary; - $show_author = (int) $show_author; - $show_date = (int) $show_date; + $show_summary = (int) $args['show_summary']; + $show_author = (int) $args['show_author']; + $show_date = (int) $args['show_date']; if ( !$rss->get_item_quantity() ) { - echo ''; + echo ''; $rss->__destruct(); unset($rss); return; } echo ''; @@ -866,8 +1273,6 @@ function wp_widget_rss_output( $rss, $args = array() ) { unset($rss); } - - /** * Display RSS widget options form. * @@ -881,56 +1286,58 @@ function wp_widget_rss_output( $rss, $args = array() ) { * @param array $inputs Override default display options. */ function wp_widget_rss_form( $args, $inputs = null ) { - $default_inputs = array( 'url' => true, 'title' => true, 'items' => true, 'show_summary' => true, 'show_author' => true, 'show_date' => true ); $inputs = wp_parse_args( $inputs, $default_inputs ); - extract( $args ); - extract( $inputs, EXTR_SKIP); - $number = esc_attr( $number ); - $title = esc_attr( $title ); - $url = esc_url( $url ); - $items = (int) $items; - if ( $items < 1 || 20 < $items ) - $items = 10; - $show_summary = (int) $show_summary; - $show_author = (int) $show_author; - $show_date = (int) $show_date; + $args['number'] = esc_attr( $args['number'] ); + $args['title'] = isset( $args['title'] ) ? esc_attr( $args['title'] ) : ''; + $args['url'] = isset( $args['url'] ) ? esc_url( $args['url'] ) : ''; + $args['items'] = isset( $args['items'] ) ? (int) $args['items'] : 0; + + if ( $args['items'] < 1 || 20 < $args['items'] ) { + $args['items'] = 10; + } + + $args['show_summary'] = isset( $args['show_summary'] ) ? (int) $args['show_summary'] : (int) $inputs['show_summary']; + $args['show_author'] = isset( $args['show_author'] ) ? (int) $args['show_author'] : (int) $inputs['show_author']; + $args['show_date'] = isset( $args['show_date'] ) ? (int) $args['show_date'] : (int) $inputs['show_date']; - if ( !empty($error) ) - echo '

' . sprintf( __('RSS Error: %s'), $error) . '

'; + if ( ! empty( $args['error'] ) ) { + echo '

' . sprintf( __( 'RSS Error: %s' ), $args['error'] ) . '

'; + } if ( $inputs['url'] ) : ?> -

-

+

+

-

-

+

+

-

- $i"; + for ( $i = 1; $i <= 20; ++$i ) { + echo ""; + } ?>

-

/> -

+

/> +

-

/> -

+

/> +

-

/> -

+

/> +

- + __( "Your most used tags in cloud format") ); - $this->WP_Widget('tag_cloud', __('Tag Cloud'), $widget_ops); + public function __construct() { + $widget_ops = array( 'description' => __( "A cloud of your most used tags.") ); + parent::__construct('tag_cloud', __('Tag Cloud'), $widget_ops); } - function widget( $args, $instance ) { - extract($args); + /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { $current_taxonomy = $this->_get_current_taxonomy($instance); if ( !empty($instance['title']) ) { $title = $instance['title']; @@ -1006,31 +1416,57 @@ class WP_Widget_Tag_Cloud extends WP_Widget { $title = $tax->labels->name; } } - $title = apply_filters('widget_title', $title, $instance, $this->id_base); - echo $before_widget; - if ( $title ) - echo $before_title . $title . $after_title; - echo '
'; - wp_tag_cloud( apply_filters('widget_tag_cloud_args', array('taxonomy' => $current_taxonomy) ) ); + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + + echo $args['before_widget']; + if ( $title ) { + echo $args['before_title'] . $title . $args['after_title']; + } + echo '
'; + + /** + * Filter the taxonomy used in the Tag Cloud widget. + * + * @since 2.8.0 + * @since 3.0.0 Added taxonomy drop-down. + * + * @see wp_tag_cloud() + * + * @param array $current_taxonomy The taxonomy to use in the tag cloud. Default 'tags'. + */ + wp_tag_cloud( apply_filters( 'widget_tag_cloud_args', array( + 'taxonomy' => $current_taxonomy + ) ) ); + echo "
\n"; - echo $after_widget; + echo $args['after_widget']; } - function update( $new_instance, $old_instance ) { + /** + * @param array $new_instance + * @param array $old_instance + * @return array + */ + public function update( $new_instance, $old_instance ) { + $instance = array(); $instance['title'] = strip_tags(stripslashes($new_instance['title'])); $instance['taxonomy'] = stripslashes($new_instance['taxonomy']); return $instance; } - function form( $instance ) { + /** + * @param array $instance + */ + public function form( $instance ) { $current_taxonomy = $this->_get_current_taxonomy($instance); ?>

__('Use this widget to add one of your custom menus as a widget.') ); - parent::WP_Widget( 'nav_menu', __('Custom Menu'), $widget_ops ); + public function __construct() { + $widget_ops = array( 'description' => __('Add a custom menu to your sidebar.') ); + parent::__construct( 'nav_menu', __('Custom Menu'), $widget_ops ); } - function widget($args, $instance) { + /** + * @param array $args + * @param array $instance + */ + public function widget( $args, $instance ) { // Get menu - $nav_menu = wp_get_nav_menu_object( $instance['nav_menu'] ); + $nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false; if ( !$nav_menu ) return; + /** This filter is documented in wp-includes/default-widgets.php */ + $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 ) ); + $nav_menu_args = array( + 'fallback_cb' => '', + 'menu' => $nav_menu + ); + + /** + * Filter the arguments for the Custom Menu widget. + * + * @since 4.2.0 + * + * @param array $nav_menu_args { + * An array of arguments passed to wp_nav_menu() to retrieve a custom menu. + * + * @type callback|bool $fallback_cb Callback to fire if the menu doesn't exist. Default empty. + * @type mixed $menu Menu ID, slug, or name. + * } + * @param stdClass $nav_menu Nav menu object for the current menu. + * @param array $args Display arguments for the current widget. + */ + wp_nav_menu( apply_filters( 'widget_nav_menu_args', $nav_menu_args, $nav_menu, $args ) ); 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']; + /** + * @param array $new_instance + * @param array $old_instance + * @return array + */ + public function update( $new_instance, $old_instance ) { + $instance = array(); + if ( ! empty( $new_instance['title'] ) ) { + $instance['title'] = strip_tags( stripslashes($new_instance['title']) ); + } + if ( ! empty( $new_instance['nav_menu'] ) ) { + $instance['nav_menu'] = (int) $new_instance['nav_menu']; + } return $instance; } - function form( $instance ) { + /** + * @param array $instance + */ + public 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 ) ); + $menus = wp_get_nav_menus(); // If no menus exists, direct the user to go and create some. - if ( !$menus ) { - echo '

'. sprintf( __('No menus have been created yet. Create some.'), admin_url('nav-menus.php') ) .'

'; - return; - } ?> -

- - -

-

- - + ?> + Create some.' ), esc_attr( $url ) ); ?>

+