WordPress.org

Make WordPress Core

Ticket #24731: multiple-select.patch

File multiple-select.patch, 2.8 KB (added by louisremi, 21 months ago)

add a 'multiple' option to wp_dropdown_categories and handle multiple selected options

  • wp-includes/category-template.php

     
    307307                'name' => 'cat', 'id' => '', 
    308308                'class' => 'postform', 'depth' => 0, 
    309309                'tab_index' => 0, 'taxonomy' => 'category', 
    310                 'hide_if_empty' => false 
     310                'hide_if_empty' => false, 
     311                'multiple' => false 
    311312        ); 
    312313 
    313314        $defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0; 
     
    324325                $r['pad_counts'] = true; 
    325326        } 
    326327 
     328        // make sure selected is always an array 
     329        if ( !is_array( $r['selected'] ) ) { 
     330                $r['selected'] = array($r['selected']); 
     331        } 
     332 
    327333        extract( $r ); 
    328334 
    329335        $tab_index_attribute = ''; 
    330336        if ( (int) $tab_index > 0 ) 
    331337                $tab_index_attribute = " tabindex=\"$tab_index\""; 
    332338 
     339        $multiple_attribute = ''; 
     340        if ( $r['multiple'] ) { 
     341                $multiple_attribute = 'multiple'; 
     342 
     343        // if this isn't a multiple select, make sure only one value is selected 
     344        } else { 
     345                $r['selected'] = array_slice( $r['selected'], 0, 1 ); 
     346        } 
     347 
    333348        $categories = get_terms( $taxonomy, $r ); 
    334349        $name = esc_attr( $name ); 
    335350        $class = esc_attr( $class ); 
    336351        $id = $id ? esc_attr( $id ) : $name; 
    337352 
    338353        if ( ! $r['hide_if_empty'] || ! empty($categories) ) 
    339                 $output = "<select name='$name' id='$id' class='$class' $tab_index_attribute>\n"; 
     354                $output = "<select $multiple_attribute name='$name' id='$id' class='$class' $tab_index_attribute>\n"; 
    340355        else 
    341356                $output = ''; 
    342357 
     
    349364 
    350365                if ( $show_option_all ) { 
    351366                        $show_option_all = apply_filters( 'list_cats', $show_option_all ); 
    352                         $selected = ( '0' === strval($r['selected']) ) ? " selected='selected'" : ''; 
     367                        $selected = ( in_array( '0', $r['selected'], true) ) ? " selected='selected'" : ''; 
    353368                        $output .= "\t<option value='0'$selected>$show_option_all</option>\n"; 
    354369                } 
    355370 
    356371                if ( $show_option_none ) { 
    357372                        $show_option_none = apply_filters( 'list_cats', $show_option_none ); 
    358                         $selected = ( '-1' === strval($r['selected']) ) ? " selected='selected'" : ''; 
     373                        $selected = ( in_array( '-1', $r['selected'], true) ) ? " selected='selected'" : ''; 
    359374                        $output .= "\t<option value='-1'$selected>$show_option_none</option>\n"; 
    360375                } 
    361376 
     
    370385        if ( ! $r['hide_if_empty'] || ! empty($categories) ) 
    371386                $output .= "</select>\n"; 
    372387 
    373         $output = apply_filters( 'wp_dropdown_cats', $output ); 
     388        $output = apply_filters( 'wp_dropdown_cats', $output, $r ); 
    374389 
    375390        if ( $echo ) 
    376391                echo $output; 
     
    938953 
    939954                $cat_name = apply_filters('list_cats', $category->name, $category); 
    940955                $output .= "\t<option class=\"level-$depth\" value=\"".$category->term_id."\""; 
    941                 if ( $category->term_id == $args['selected'] ) 
     956                if ( in_array( $category->term_id, $args['selected'] ) ) 
    942957                        $output .= ' selected="selected"'; 
    943958                $output .= '>'; 
    944959                $output .= $pad.$cat_name;