Je crée un site Web immobilier sur WordPress, je crée une recherche personnalisée et j'utilise tax_query pour filtrer les résultats de recherche afin d'afficher les "États" et les "banlieues".
La recherche fonctionne bien lorsque les options sont sélectionnées. Cependant, si rien n'est sélectionné, aucun résultat de recherche ne s'affichera du tout. C'est un problème avec un site Web immobilier, car le plus souvent, un utilisateur peut sélectionner un "État" mais pas le "quartier", ou peut-être rien du tout.
Existe-t-il un moyen correct ou comment dois-je procéder pour que les résultats apparaissent si rien (ou l'un ou l'autre) n'est sélectionné.
Voici ma liste déroulante pour les banlieues:
<!-- Suburbs dropdown -->
<select name="suburbs">
<option value="any" selected>Any</option>
<?php
$suburb_terms = get_terms(array(
'taxonomy' => 'suburb',
'hide_empty' => true,
'orderby' => 'name',
) );
foreach( $suburb_terms as $term ) {
echo '<option value="' . $term->slug . '">' . $term->name . '</option>';
}
?>
</select>
Et en traitant le formulaire:
// Suburbs
if( !empty( $_GET['suburbs'] ) ) {
$suburbs = $_GET['suburbs'];
}
// States
if( !empty( $_GET['states'] ) ) {
$states = $_GET['states'];
}
// the query
$property_query = new WP_Query(
array(
'post_type' => 'properties',
'posts_per_page' => 10,
'tax_query' => array(
array(
'taxonomy' => 'state',
'field' => 'slug',
'terms' => $states,
),
array(
'taxonomy' => 'suburb',
'field' => 'slug',
'terms' => $suburbs,
)
),
)
);
Il suffit donc de confirmer que la recherche fonctionne correctement lorsque les menus déroulants sont sélectionnés. Mais dans mon cas, il faut que les résultats s'affichent si rien est sélectionné. Quelqu'un sait comment y parvenir? Je vous remercie.
Jusqu'ici, ajoutez une condition de taxonomie en vérifiant les valeurs suburbs
et states
.
// Suburbs
if( !empty( $_GET['suburbs'] ) ) {
$suburbs = $_GET['suburbs'];
}
// States
if( !empty( $_GET['states'] ) ) {
$states = $_GET['states'];
}
// Query arguments.
$args = array(
'post_type' => 'properties',
'posts_per_page' => 10,
);
$taxquery = array();
// if $state variable is selected.
if(!empty($states) || isset($suburbs) ){
array_Push($taxquery,array(
'taxonomy' => 'state',
'field' => 'slug',
'terms' => $states,
));
}
// if $suburbs variable is selected.
if(!empty($suburbs) || isset($suburbs) ) ){
array_Push($taxquery,array(
'taxonomy' => 'suburb',
'field' => 'slug',
'terms' => $suburbs,
));
}
// if $taxquery has array;
if(!empty($taxquery)){
$args['tax_query'] = $taxquery;
}
// And finally fetch the all post.
$property_query = new WP_Query($args);
Remplacez votre code PHP par ceci. Cela résoudra définitivement votre problème :)