diff --git a/wp-includes/widgets.php b/wp-includes/widgets.php index 976719942d..1f0b0075e1 100644 --- a/wp-includes/widgets.php +++ b/wp-includes/widgets.php @@ -609,20 +609,22 @@ 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,31 +650,157 @@ 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']); + + $title = attribute_escape( $options[$number]['title'] ); ?> -

-

-

-

- +

+ +

+ +

+ +

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

+

+ + + + +

+
+
+ 1, 1 => $options ); + + update_option( 'widget_categories', $newoptions ); + + $sidebars_widgets = get_option( 'sidebars_widgets' ); + if ( is_array( $sidebars_widgets ) ) { + foreach ( $sidebars_widgets as $sidebar => $widgets ) { + if ( is_array( $widgets ) ) { + foreach ( $widgets as $widget ) + $new_widgets[$sidebar][] = ( $widget == 'categories' ) ? 'categories-1' : $widget; + } else { + $new_widgets[$sidebar] = $widgets; + } + } + if ( $new_widgets != $sidebars_widgets ) + update_option( 'sidebars_widgets', $new_widgets ); + } + + if ( isset( $_POST['categories-submit'] ) ) { + $_POST['categories-submit-1'] = $_POST['categories-submit']; + $_POST['categories-count-1'] = $_POST['categories-count']; + $_POST['categories-hierarchical-1'] = $_POST['categories-hierarchical']; + $_POST['categories-dropdown-1'] = $_POST['categories-dropdown']; + $_POST['categories-title-1'] = $_POST['categories-title']; + foreach ( $_POST as $k => $v ) + if ( substr($k, -5) == 'order' ) + $_POST[$k] = str_replace('categories', 'categories-1', $v); + } + + return $newoptions; +} + +function wp_widget_categories_register() { + $options = get_option( 'widget_categories' ); + if ( !isset($options['number']) ) + $options = wp_widget_categories_upgrade(); + $number = (int) $options['number']; + + if ( $number > 9 ) { + $number = 9; + } elseif ( $number < 1 ) { + $number = 1; + } + + $dims = array( 'width' => 350, 'height' => 170 ); + $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,39 +1082,44 @@ 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_categories_register(); wp_widget_text_register(); wp_widget_rss_register(); wp_widget_recent_comments_register(); - $wp_register_widget_defaults = false; + $GLOBALS['wp_register_widget_defaults'] = false; do_action('widgets_init'); }