web-dev-qa-db-fra.com

en utilisant plusieurs termes dans tax_query

J'essaie de construire un site de recherche immobilière.

tout d’abord, voici le formulaire de recherche (désolé pour les cours d’allemand et autres):

<form  method="post" action="<?php bloginfo('url');?>/immobilien-suche/">
<?php
$taxonomiesImmo = get_object_taxonomies('immobilien');
$termsImmoBundesland = get_terms($taxonomiesImmo[0]);
?>
    <fieldset name="bundeslaender">
        <input type="checkbox" value="alleBundeslaender">alle Bundesl&auml;nder</input>
        <?php foreach ($termsImmoBundesland as $termImmoBundesland) { ?>
            <label><input type="checkbox" value="<?php echo $termImmoBundesland->slug; ?>" name="checkedBundeslaender[]"><?php echo $termImmoBundesland->name; ?></label>
        <?php } ?>
    </fieldset>
    <input type="submit"/>  
</form>

puis dans mon modèle de page de résultats de recherche, j'implose ces résultats de case à cocher multiples (tableau) pour obtenir une liste propre, comme indiqué dans la référence de la fonction:

'terms'    => array( 'action', 'comedy' ), // wordpress codex

mon imploser

if ( count($_POST['checkedBundeslaender']) > 1 ) {
    $checkedBundeslaenderList = "'".implode("', '", $_POST['checkedBundeslaender'])."'";
    // string form: 'term1', 'term2', 'term3' ...
} else {
    $checkedBundeslaenderList = $_POST['checkedBundeslaender']);
    // string form: 'term1'
}

et enfin ma requête args:

$newImmoArgs = array(
    'post_type' => 'immobilien',
    'posts_per_page' => -1,
    'tax_query' => array(
        array(
            'taxonomy' => 'bundesland',
            'field'    => 'slug',
            'terms'    => array( $checkedBundeslaenderList ),
            'operator' => 'IN',
            'include_children' => false,
        ),
    ),                              

);

Mon problème est que ma requête n'a aucun résultat s'il y a 2 cases ou plus cochées… c'est seulement si 1 case est cochée.

s'il vous plaît aider!

cordialement, Rellston.

1
Rellston

Vous mélangez des tableaux. Dans votre "mon implode", $checkedBundeslaenderList varie entre une chaîne et un tableau, en fonction du nombre d'éléments.

Et puis dans vos arguments de requête, vous l'imbrisez dans un tableau:

'terms' => array( $checkedBundeslaenderList ),

Donc, ce que vous pourriez vous retrouver est soit:

array( array( 1 ) );

...ou:

array( '1,2,3,4' );

Les formats ne sont pas valables non plus. Au lieu de cela, utilisez toujours un tableau:

if ( ! empty( $_POST['checkedBundeslaender'] ) ) {
    $checkedBundeslaenderList = wp_unslash( ( array ) $_POST['checkedBundeslaender'] );
} else {
    $checkedBundeslaenderList = array();
}

Et puis passez-le directement à votre requête:

'terms' => $checkedBundeslaenderList,
2
TheDeadMedic