Make WordPress Core


Ignore:
Timestamp:
06/08/2007 02:49:30 PM (18 years ago)
Author:
rob1n
Message:

Add support for multiple instances of the category widget. see #4285

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/widgets.php

    r5605 r5669  
    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;
     
    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?>
     
    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']));
    658     }
     653   
     654    if ( !is_array( $options ) ) {
     655        $options = $newoptions = get_option( 'widget_categories' );
     656    }
     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>
     
    672679            <input type="hidden" id="categories-submit" name="categories-submit" value="1" />
    673680<?php
     681}
     682
     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' );
    674754}
    675755
     
    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;
Note: See TracChangeset for help on using the changeset viewer.