Make WordPress Core

Ticket #4285: 4285-multiple.diff

File 4285-multiple.diff, 7.8 KB (added by rob1n, 19 years ago)

adds support for multiple instances

  • wp-includes/widgets.php

     
    609609        add_action('sidebar_admin_page', 'wp_widget_text_page');
    610610}
    611611
    612 function wp_widget_categories($args) {
     612function wp_widget_categories($args, $number = 1) {
    613613        extract($args);
    614614        $options = get_option('widget_categories');
    615         $c = $options['count'] ? '1' : '0';
    616         $h = $options['hierarchical'] ? '1' : '0';
    617         $d = $options['dropdown'] ? '1' : '0';
    618         $title = empty($options['title']) ? __('Categories') : $options['title'];
     615        $c = $options[$number]['count'] ? '1' : '0';
     616        $h = $options[$number]['hierarchical'] ? '1' : '0';
     617        $d = $options[$number]['dropdown'] ? '1' : '0';
     618        $title = empty($options[$number]['title']) ? __('Categories') : $options[$number]['title'];
    619619
    620620        echo $before_widget;
    621621        echo $before_title . $title . $after_title;
    622622
    623623        $cat_args = "orderby=name&show_count={$c}&hierarchical={$h}";
    624624
    625         if($d) {
     625        if ( $d ) {
    626626                wp_dropdown_categories($cat_args . '&show_option_none= ' . __('Select Category'));
    627627?>
    628628
     
    648648        echo $after_widget;
    649649}
    650650
    651 function wp_widget_categories_control() {
     651function wp_widget_categories_control( $number ) {
    652652        $options = $newoptions = get_option('widget_categories');
    653         if ( $_POST['categories-submit'] ) {
    654                 $newoptions['count'] = isset($_POST['categories-count']);
    655                 $newoptions['hierarchical'] = isset($_POST['categories-hierarchical']);
    656                 $newoptions['dropdown'] = isset($_POST['categories-dropdown']);
    657                 $newoptions['title'] = strip_tags(stripslashes($_POST['categories-title']));
     653       
     654        if ( !is_array( $options ) ) {
     655                $options = $newoptions = get_option( 'widget_categories' );
    658656        }
     657       
     658        if ( $_POST['categories-submit-' . $number] ) {
     659                $newoptions[$number]['count'] = isset($_POST['categories-count-' . $number]);
     660                $newoptions[$number]['hierarchical'] = isset($_POST['categories-hierarchical-' . $number]);
     661                $newoptions[$number]['dropdown'] = isset($_POST['categories-dropdown-' . $number]);
     662                $newoptions[$number]['title'] = strip_tags(stripslashes($_POST['categories-title-' . $number]));
     663        }
     664       
    659665        if ( $options != $newoptions ) {
    660666                $options = $newoptions;
    661667                update_option('widget_categories', $options);
    662668        }
    663         $count = $options['count'] ? 'checked="checked"' : '';
    664         $hierarchical = $options['hierarchical'] ? 'checked="checked"' : '';
    665         $dropdown = $options['dropdown'] ? 'checked="checked"' : '';
    666         $title = attribute_escape($options['title']);
     669       
     670        $count = $options[$number]['count'] ? 'checked="checked"' : '';
     671        $hierarchical = $options[$number]['hierarchical'] ? 'checked="checked"' : '';
     672        $dropdown = $options[$number]['dropdown'] ? 'checked="checked"' : '';
     673        $title = attribute_escape($options[$number]['title']);
    667674?>
    668675                        <p><label for="categories-title"><?php _e('Title:'); ?> <input style="width: 250px;" id="categories-title" name="categories-title" type="text" value="<?php echo $title; ?>" /></label></p>
    669676                        <p style="text-align:right;margin-right:40px;"><label for="categories-count"><?php _e('Show post counts'); ?> <input class="checkbox" type="checkbox" <?php echo $count; ?> id="categories-count" name="categories-count" /></label></p>
     
    673680<?php
    674681}
    675682
     683function wp_widget_categories_setup() {
     684        $options = $newoptions = get_option( 'widget_categories' );
     685       
     686        if ( isset( $_POST['categories-number-submit'] ) ) {
     687                $number = (int) $_POST['categories-number'];
     688               
     689                if ( $number > 9 ) {
     690                        $number = 9;
     691                } elseif ( $number < 1 ) {
     692                        $number = 1;
     693                }
     694               
     695                $newoptions['number'] = $number;
     696        }
     697       
     698        if ( $newoptions != $options ) {
     699                $options = $newoptions;
     700                update_option( 'widget_categories', $options );
     701                wp_widget_categories_register( $options['number'] );
     702        }
     703}
     704
     705function wp_widget_categories_page() {
     706        $options = get_option( 'widget_categories' );
     707?>
     708        <div class="wrap">
     709                <form method="post">
     710                        <h2><?php _e( 'Categories Widgets' ); ?></h2>
     711                        <p style="line-height: 30px;"><?php _e( 'How many categories widgets would you like?' ); ?>
     712                                <select id="categories-number" name="categories-number" value="<?php echo attribute_escape( $options['number'] ); ?>">
     713                                        <?php
     714                                                for ( $i = 1; $i < 10; $i++ ) {
     715                                                        echo '<option value="' . $i . '"' . ( $i == $options['number'] ? ' selected="selected"' : '' ) . '>' . $i . "</option>\n";
     716                                                }
     717                                        ?>
     718                                </select>
     719                                <span class="submit">
     720                                        <input type="submit" value="<?php echo attribute_escape( __( 'Save' ) ); ?>" id="categories-number-submit" name="categories-number-submit" />
     721                                </span>
     722                        </p>
     723                </form>
     724        </div>
     725<?php
     726}
     727
     728function wp_widget_categories_register() {
     729        $options = get_option( 'widget_categories' );
     730        $number = (int) $options['number'];
     731       
     732        if ( $number > 9 ) {
     733                $number = 9;
     734        } elseif ( $number < 1 ) {
     735                $number = 1;
     736        }
     737       
     738        $dims = array( 'width' => 460, 'height' => 350 );
     739        $class = array( 'classname' => 'widget_catgories' );
     740       
     741        for ( $i = 1; $i <= 9; $i++ ) {
     742                $name = sprintf( __( 'Categories %d' ), $i );
     743                $id = 'categories-' . $i;
     744               
     745                $widget_callback = ( $i <= $number ) ? 'wp_widget_categories' : '';
     746                $control_callback = ( $i <= $number ) ? 'wp_widget_categories_control' : '';
     747               
     748                wp_register_sidebar_widget( $id, $name, $widget_callback, $class, $i );
     749                wp_register_widget_control( $id, $name, $control_callback, $dims, $i );
     750        }
     751       
     752        add_action( 'sidebar_admin_setup', 'wp_widget_categories_setup' );
     753        add_action( 'sidebar_admin_page', 'wp_widget_categories_page' );
     754}
     755
    676756function wp_widget_recent_entries($args) {
    677757        if ( $output = wp_cache_get('widget_recent_entries') )
    678758                return print($output);
     
    9541034}
    9551035
    9561036function wp_widgets_init() {
    957         global $wp_register_widget_defaults;
    958 
    959         $wp_register_widget_defaults = true;
    960         $dims90 = array('height' => 90, 'width' => 300);
    961         $dims100 = array('height' => 100, 'width' => 300);
    962         $dims150 = array('height' => 150, 'width' => 300);
     1037        $GLOBALS['wp_register_widget_defaults'] = true;
     1038       
     1039        $dims90 = array( 'height' => 90, 'width' => 300 );
     1040        $dims100 = array( 'height' => 100, 'width' => 300 );
     1041        $dims150 = array( 'height' => 150, 'width' => 300 );
     1042       
    9631043        $class = array('classname' => 'widget_pages');
    9641044        wp_register_sidebar_widget('pages', __('Pages'), 'wp_widget_pages', $class);
    9651045        wp_register_widget_control('pages', __('Pages'), 'wp_widget_pages_control', $dims150);
     1046       
    9661047        $class['classname'] = 'widget_calendar';
    9671048        wp_register_sidebar_widget('calendar', __('Calendar'), 'wp_widget_calendar', $class);
    9681049        wp_register_widget_control('calendar', __('Calendar'), 'wp_widget_calendar_control', $dims90);
     1050       
    9691051        $class['classname'] = 'widget_archives';
    9701052        wp_register_sidebar_widget('archives', __('Archives'), 'wp_widget_archives', $class);
    9711053        wp_register_widget_control('archives', __('Archives'), 'wp_widget_archives_control', $dims100);
     1054       
    9721055        $class['classname'] = 'widget_links';
    9731056        wp_register_sidebar_widget('links', __('Links'), 'wp_widget_links', $class);
     1057       
    9741058        $class['classname'] = 'widget_meta';
    9751059        wp_register_sidebar_widget('meta', __('Meta'), 'wp_widget_meta', $class);
    9761060        wp_register_widget_control('meta', __('Meta'), 'wp_widget_meta_control', $dims90);
     1061       
    9771062        $class['classname'] = 'widget_search';
    9781063        wp_register_sidebar_widget('search', __('Search'), 'wp_widget_search', $class);
    979         $class['classname'] = 'widget_categories';
    980         wp_register_sidebar_widget('categories', __('Categories'), 'wp_widget_categories', $class);
    981         wp_register_widget_control('categories', __('Categories'), 'wp_widget_categories_control', $dims150);
     1064       
    9821065        $class['classname'] = 'widget_recent_entries';
    9831066        wp_register_sidebar_widget('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries', $class);
    9841067        wp_register_widget_control('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries_control', $dims90);
     1068       
    9851069        wp_widget_text_register();
    9861070        wp_widget_rss_register();
    9871071        wp_widget_recent_comments_register();
     1072        wp_widget_categories_register();
    9881073
    9891074        $wp_register_widget_defaults = false;
    9901075