2
respostas

filtrar com dua opções wordpress

Bom dia, estou fazendo um filtro com duas opções, localidade e tipo-imovel, quando filtro com os dois campos juntos o meu formulário funciona, porém quando eu tento filtrar apenas por cidade ou por tipo de imovel eu não consigo filtrar, ele muda na url mas na tela mostra todos os imoveis, ja verifiquei se os imoveis estavam com as taxonomias erradas, porem estão todos corretos, segue abaixo o trecho do código do index:

<?php
    $existeBusca = array_key_exists('localidade', $_GET);
    $existeBusca2 = array_key_exists('tipo-imovel', $_GET);
    if ($existeBusca && $_GET['localidade'] === '') {
        wp_redirect( home_url() );
    }
    if ($existeBusca2 && $_GET['tipo-imovel'] === '') {
        wp_redirect( home_url() );
    }
?>
<section class="home-main row">
    <div class="container">

        <?php $taxonomiasL = get_terms('localizacao'); ?>
        <?php $taxonomiasT = get_terms('tipo-de-imovel'); ?>

        <form class="row" action="<?= bloginfo('url'); ?>">
            <div class="input-field col s12 m4">
                <select name="localidade">
                    <option value="" disabled selected>Cidades</option>
                    <?php foreach ($taxonomiasL as $taxonomiaL) { ?>
                        <option value="<?= $taxonomiaL->slug; ?>"><?= $taxonomiaL->name; ?></option>
                    <?php    
                    } ?>
                </select>
            </div>
            <div class="input-field col s12 m4">
                <select name="tipo-imovel">
                    <option value="" disabled selected>Tipo de imóveis</option>
                    <?php foreach ($taxonomiasT as $taxonomiaT) { ?>
                        <option value="<?= $taxonomiaT->slug; ?>"><?= $taxonomiaT->name; ?></option>
                    <?php    
                    } ?>
                </select>
            </div>
            <button type="submit" class="waves-effect waves-light btn col s12 m4">Filtrar</button>
        </form>
        <ul class="imoveis-listagem">
            <?php
            if($existeBusca && $existeBusca2){
                $taxQuery = array( 
                    array(
                        'taxonomy' => 'localizacao',
                        'field' => 'slug',
                        'terms' => $_GET['localidade']
                    ),
                    array(
                        'taxonomy' => 'tipo-de-imovel',
                        'field' => 'slug',
                        'terms' => $_GET['tipo-imovel']
                    )
                );
            };
            $args = array(
                'post_type' => 'imovel',
                'tax_query' => $taxQuery
            );
2 respostas

Pelo que eu vi no seu código, a variável "taxQuery" somente é criada se os dois campos estiverem preenchidos, quando preenche apenas 1 a variável não existe, por isso deve estar trazendo tudo.

Uma forma de resolver o problema pode ser a seguinte:

if($existeBusca && $existeBusca2){
    $taxQuery = array( 
        array(
            'taxonomy' => 'localizacao',
            'field' => 'slug',
            'terms' => $_GET['localidade']
        ),
        array(
            'taxonomy' => 'tipo-de-imovel',
            'field' => 'slug',
            'terms' => $_GET['tipo-imovel']
        )
    );
} else {

    if ($existeBusca){
        $taxQuery = array( 
        array(
            'taxonomy' => 'localizacao',
            'field' => 'slug',
            'terms' => $_GET['localidade']
        ));
    }
    if ($existeBusca2){
        $taxQuery = array( 
            array(
            'taxonomy' => 'tipo-de-imovel',
            'field' => 'slug',
            'terms' => $_GET['tipo-imovel']
            ));
    }
}

Isso, funcionou aqui, muito obrigado