Come utilizzare wp_dropdown_categories con selezione multipla
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
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;
}

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>

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.

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.
