Come utilizzare wp_dropdown_categories con selezione multipla

29 gen 2016, 13:38:54
Visualizzazioni: 14.6K
Voti: 3

Nel box di ricerca vorrei che i visitatori potessero cercare più di una località (case). Il codice attuale è:

    <div class="col-md-3 col-sm-6 col-xs-12">
        <label for="property_location"><?php _ex( 'Località', 'etichetta ricerca proprietà', 'ci_theme' ); ?></label>

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

Come posso modificarlo per avere una selezione multipla?

Grazie mille per la risposta. Carlijn

0
Tutte le risposte alla domanda 4
1

wp_dropdown_categories ha un filtro applicato all'output che viene chiamato subito prima che la funzione restituisca o stampi l'output.

Con questo puoi aggiungere un filtro al tuo file functions.php che manipola il campo select e aggiunge un attributo multiple ad esso.

Il filtro sottostante cercherebbe il tag di apertura select e aggiungerebbe l'attributo multiple. Puoi anche aggiungere l'attributo size per controllare il numero di elementi visualizzati alla volta.

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 gen 2017 09:25:32
Commenti

lol probabilmente lontano da ciò che l'OP voleva realmente, ma risponde esattamente alla domanda così com'è formulata :)

Mark Kaplun Mark Kaplun
21 gen 2017 09:44:46
0

Aggiungi questo codice al tuo 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;
}

E aggiungi l'argomento multiple come mostrato di seguito:

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

Questa è un'aggiunta alla risposta di @MahdiY. Quella risposta presuppone che i dati del multiselect saranno in forma delimitata da virgole. Io sto trovando che il mio multiselect è in realtà un array, nel qual caso la funzione wp_dropdown_cats_multiple non funziona. Ho aggiunto una riga e modificato il ciclo 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;
}

Non ho potuto aggiungere questo come commento perché la mia reputazione è troppo bassa.

6 set 2017 23:10:23
0

Puoi verificare:

wp_category_checklist Puoi definire un walker personalizzato e cambiare le caselle di selezione in un menu a discesa con selezione multipla.

wp_category_checklist genera una lista non ordinata di elementi checkbox <input> etichettati con i nomi delle categorie.

29 gen 2016 15:27:42