dans la zone de recherche, j'aimerais que les visiteurs puissent rechercher plus d'un lieu (maisons). Le code actuel est:
<div class="col-md-3 col-sm-6 col-xs-12">
<label for="property_location"><?php _ex( 'Locatie', '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>
Comment puis-je changer cela en une sélection multiple?
Merci beaucoup pour votre réponse. Carlijn
wp_dropdown_categories
a un filtre appliqué à la sortie appelée juste avant que la fonction ne retourne ou ne renvoie la sortie.
Avec cela, vous pouvez ajouter un filtre à votre fichier funtions.php qui manipule le champ de sélection et lui ajoute un attribut multiple.
Le filtre ci-dessous recherche la balise d'ouverture sélectionnée et y ajoute l'attribut multiple. Vous pouvez également ajouter l'attribut size pour contrôler le nombre d'éléments affichés à la fois.
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;
}
Ajoutez simplement ce code à votre 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;
}
Et ajoutez plusieurs arguments comme ci-dessous:
<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'] : '', // e.x 86,110,786
'multiple' => true
) );
?>
</div>
Ceci est un ajout à la réponse de @MahdiY. Cette réponse suppose que les données multisélectionnées seront sous forme délimitée par des virgules. Je trouve que mon multi-sélection est en fait un tableau, auquel cas le wp_dropdown_cats_multiple
se brise. J'ai ajouté une ligne et modifié la 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;
}
Impossible d'ajouter ceci en tant que commentaire car ma réputation est trop basse.
Tu peux vérifier:
wp_category_checklist Vous pouvez définir un marcheur personnalisé et modifier les cases à cocher en une liste déroulante avec sélection multiple.
wp_category_checklist
affiche une liste non ordonnée d'éléments de case à cocher <input>
étiquetés avec des noms de catégorie.