From cb975258cad43f2c5e0e25dde6ddc6faac426fa5 Mon Sep 17 00:00:00 2001 From: rob1n Date: Fri, 8 Jun 2007 14:49:30 +0000 Subject: [PATCH] Add support for multiple instances of the category widget. see #4285 git-svn-id: http://svn.automattic.com/wordpress/branches/2.2@5669 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/widgets.php | 135 ++++++++++++++++++++++++++++++++-------- 1 file changed, 110 insertions(+), 25 deletions(-) diff --git a/wp-includes/widgets.php b/wp-includes/widgets.php index d269d351c8..2f3ba008b0 100644 --- a/wp-includes/widgets.php +++ b/wp-includes/widgets.php @@ -609,20 +609,20 @@ function wp_widget_text_register() { add_action('sidebar_admin_page', 'wp_widget_text_page'); } -function wp_widget_categories($args) { +function wp_widget_categories($args, $number = 1) { extract($args); $options = get_option('widget_categories'); - $c = $options['count'] ? '1' : '0'; - $h = $options['hierarchical'] ? '1' : '0'; - $d = $options['dropdown'] ? '1' : '0'; - $title = empty($options['title']) ? __('Categories') : $options['title']; + $c = $options[$number]['count'] ? '1' : '0'; + $h = $options[$number]['hierarchical'] ? '1' : '0'; + $d = $options[$number]['dropdown'] ? '1' : '0'; + $title = empty($options[$number]['title']) ? __('Categories') : $options[$number]['title']; echo $before_widget; echo $before_title . $title . $after_title; $cat_args = "orderby=name&show_count={$c}&hierarchical={$h}"; - if($d) { + if ( $d ) { wp_dropdown_categories($cat_args . '&show_option_none= ' . __('Select Category')); ?> @@ -648,22 +648,29 @@ function wp_widget_categories($args) { echo $after_widget; } -function wp_widget_categories_control() { +function wp_widget_categories_control( $number ) { $options = $newoptions = get_option('widget_categories'); - if ( $_POST['categories-submit'] ) { - $newoptions['count'] = isset($_POST['categories-count']); - $newoptions['hierarchical'] = isset($_POST['categories-hierarchical']); - $newoptions['dropdown'] = isset($_POST['categories-dropdown']); - $newoptions['title'] = strip_tags(stripslashes($_POST['categories-title'])); + + if ( !is_array( $options ) ) { + $options = $newoptions = get_option( 'widget_categories' ); } + + if ( $_POST['categories-submit-' . $number] ) { + $newoptions[$number]['count'] = isset($_POST['categories-count-' . $number]); + $newoptions[$number]['hierarchical'] = isset($_POST['categories-hierarchical-' . $number]); + $newoptions[$number]['dropdown'] = isset($_POST['categories-dropdown-' . $number]); + $newoptions[$number]['title'] = strip_tags(stripslashes($_POST['categories-title-' . $number])); + } + if ( $options != $newoptions ) { $options = $newoptions; update_option('widget_categories', $options); } - $count = $options['count'] ? 'checked="checked"' : ''; - $hierarchical = $options['hierarchical'] ? 'checked="checked"' : ''; - $dropdown = $options['dropdown'] ? 'checked="checked"' : ''; - $title = attribute_escape($options['title']); + + $count = $options[$number]['count'] ? 'checked="checked"' : ''; + $hierarchical = $options[$number]['hierarchical'] ? 'checked="checked"' : ''; + $dropdown = $options[$number]['dropdown'] ? 'checked="checked"' : ''; + $title = attribute_escape($options[$number]['title']); ?>

@@ -673,6 +680,79 @@ function wp_widget_categories_control() { 9 ) { + $number = 9; + } elseif ( $number < 1 ) { + $number = 1; + } + + $newoptions['number'] = $number; + } + + if ( $newoptions != $options ) { + $options = $newoptions; + update_option( 'widget_categories', $options ); + wp_widget_categories_register( $options['number'] ); + } +} + +function wp_widget_categories_page() { + $options = get_option( 'widget_categories' ); +?> +
+
+

+

+ + + + +

+
+
+ 9 ) { + $number = 9; + } elseif ( $number < 1 ) { + $number = 1; + } + + $dims = array( 'width' => 460, 'height' => 350 ); + $class = array( 'classname' => 'widget_catgories' ); + + for ( $i = 1; $i <= 9; $i++ ) { + $name = sprintf( __( 'Categories %d' ), $i ); + $id = 'categories-' . $i; + + $widget_callback = ( $i <= $number ) ? 'wp_widget_categories' : ''; + $control_callback = ( $i <= $number ) ? 'wp_widget_categories_control' : ''; + + wp_register_sidebar_widget( $id, $name, $widget_callback, $class, $i ); + wp_register_widget_control( $id, $name, $control_callback, $dims, $i ); + } + + add_action( 'sidebar_admin_setup', 'wp_widget_categories_setup' ); + add_action( 'sidebar_admin_page', 'wp_widget_categories_page' ); +} + function wp_widget_recent_entries($args) { if ( $output = wp_cache_get('widget_recent_entries') ) return print($output); @@ -954,37 +1034,42 @@ function wp_widget_rss_register() { } function wp_widgets_init() { - global $wp_register_widget_defaults; - - $wp_register_widget_defaults = true; - $dims90 = array('height' => 90, 'width' => 300); - $dims100 = array('height' => 100, 'width' => 300); - $dims150 = array('height' => 150, 'width' => 300); + $GLOBALS['wp_register_widget_defaults'] = true; + + $dims90 = array( 'height' => 90, 'width' => 300 ); + $dims100 = array( 'height' => 100, 'width' => 300 ); + $dims150 = array( 'height' => 150, 'width' => 300 ); + $class = array('classname' => 'widget_pages'); wp_register_sidebar_widget('pages', __('Pages'), 'wp_widget_pages', $class); wp_register_widget_control('pages', __('Pages'), 'wp_widget_pages_control', $dims150); + $class['classname'] = 'widget_calendar'; wp_register_sidebar_widget('calendar', __('Calendar'), 'wp_widget_calendar', $class); wp_register_widget_control('calendar', __('Calendar'), 'wp_widget_calendar_control', $dims90); + $class['classname'] = 'widget_archives'; wp_register_sidebar_widget('archives', __('Archives'), 'wp_widget_archives', $class); wp_register_widget_control('archives', __('Archives'), 'wp_widget_archives_control', $dims100); + $class['classname'] = 'widget_links'; wp_register_sidebar_widget('links', __('Links'), 'wp_widget_links', $class); + $class['classname'] = 'widget_meta'; wp_register_sidebar_widget('meta', __('Meta'), 'wp_widget_meta', $class); wp_register_widget_control('meta', __('Meta'), 'wp_widget_meta_control', $dims90); + $class['classname'] = 'widget_search'; wp_register_sidebar_widget('search', __('Search'), 'wp_widget_search', $class); - $class['classname'] = 'widget_categories'; - wp_register_sidebar_widget('categories', __('Categories'), 'wp_widget_categories', $class); - wp_register_widget_control('categories', __('Categories'), 'wp_widget_categories_control', $dims150); + $class['classname'] = 'widget_recent_entries'; wp_register_sidebar_widget('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries', $class); wp_register_widget_control('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries_control', $dims90); + wp_widget_text_register(); wp_widget_rss_register(); wp_widget_recent_comments_register(); + wp_widget_categories_register(); $wp_register_widget_defaults = false;