Cum să faci wp_dropdown_categories cu selectare multiplă în WordPress

29 ian. 2016, 13:38:54
Vizualizări: 14.6K
Voturi: 3

În caseta de căutare, aș dori ca vizitatorii să poată căuta mai multe locații (case). Codul actual este:

    <div class="col-md-3 col-sm-6 col-xs-12">
        <label for="property_location"><?php _ex( 'Locație', 'property search label', 'ci_theme' ); ?></label>

        <div class="ci-select">
            <?php
                wp_dropdown_categories( array(
                    'taxonomy'          => 'property_location',
                    'hierarchical'      => true,
                    'show_option_none'  => esc_html_x( '-', 'any property location', 'ci_theme' ),
                    'option_none_value' => '',
                    'name'              => 's_property_location',
                    'id'                => 'property_location',
                    'selected'          => isset( $_GET['s_property_location'] ) ? $_GET['s_property_location'] : '',
                ) );
            ?>
        </div>
    </div>

Cum pot să modific acest cod pentru a permite selectarea multiplă?

Vă mulțumesc foarte mult pentru răspuns. Carlijn

0
Toate răspunsurile la întrebare 4
1

wp_dropdown_categories are un filtru aplicat asupra rezultatului care este apelat chiar înainte ca funcția să returneze sau să afișeze rezultatul.

Cu aceasta poți adăuga un filtru în fișierul functions.php care manipulează câmpul select și adaugă un atribut multiple acestuia.

Filtrul de mai jos va căuta eticheta de deschidere select și va adăuga atributul multiple. De asemenea, poți adăuga atributul size pentru a controla numărul de elemente afișate simultan.

add_filter( 'wp_dropdown_cats', 'dropdown_filter', 10, 2);

function dropdown_filter( $output, $r ) {
    $output = preg_replace( '/<select (.*?) >/', '<select $1 size="5" multiple>', $output);
    return $output;
}
21 ian. 2017 09:25:32
Comentarii

lol probabil departe de ceea ce voia de fapt OP, dar răspunde exact la întrebarea așa cum este formulată :)

Mark Kaplun Mark Kaplun
21 ian. 2017 09:44:46
0

Doar adaugă acest cod în fișierul tău functions.php

add_filter( 'wp_dropdown_cats', 'wp_dropdown_cats_multiple', 10, 2 );

function wp_dropdown_cats_multiple( $output, $r ) {

    if( isset( $r['multiple'] ) && $r['multiple'] ) {

         $output = preg_replace( '/^<select/i', '<select multiple', $output );

        $output = str_replace( "name='{$r['name']}'", "name='{$r['name']}[]'", $output );

        foreach ( array_map( 'trim', explode( ",", $r['selected'] ) ) as $value )
            $output = str_replace( "value=\"{$value}\"", "value=\"{$value}\" selected", $output );

    }

    return $output;
}

Și adaugă argumentul multiple ca mai jos:

<div class="ci-select">
    <?php
        wp_dropdown_categories( array(
            'taxonomy'          => 'property_location',
            'hierarchical'      => true,
            'show_option_none'  => esc_html_x( '-', 'any property location', 'ci_theme' ),
            'option_none_value' => '',
            'name'              => 's_property_location',
            'id'                => 'property_location',
            'selected'          => isset( $_GET['s_property_location'] ) ? $_GET['s_property_location'] : '', // ex. 86,110,786
            'multiple'          => true
        ) );
    ?>
</div>
23 mar. 2017 14:26:18
0

Acesta este un adaos la răspunsul lui @MahdiY. Acel răspuns presupune că datele pentru selecția multiplă vor fi în format delimitare prin virgulă. Eu am descoperit că selecția mea multiplă este de fapt un array, caz în care funcția wp_dropdown_cats_multiple nu funcționează. Am adăugat o linie și am modificat bucla foreach.

function wp_dropdown_cats_multiple( $output, $r ) {

    if( isset( $r['multiple'] ) && $r['multiple'] ) {

        $output = preg_replace( '/^<select/i', '<select multiple data-live-search="true" data-style="btn-info"', $output );

        $output = str_replace( "name='{$r['name']}'", "name='{$r['name']}[]'", $output );

        $selected = is_array($r['selected']) ? $r['selected'] : explode( ",", $r['selected'] );
        foreach ( array_map( 'trim', $selected ) as $value )
            $output = str_replace( "value=\"{$value}\"", "value=\"{$value}\" selected", $output );

    }

    return $output;
}

Nu am putut adăuga acest lucru ca un comentariu deoarece reputația mea este prea mică.

6 sept. 2017 23:10:23
0

Puteți verifica:

wp_category_checklist Puteți defini un walker personalizat și a schimba casetele de bifat în meniuri drop-down cu selecție multiplă.

wp_category_checklist afișează o listă neordonată de elemente <input> de tip checkbox etichetate cu numele categoriilor.

29 ian. 2016 15:27:42