Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Taxonomia com condições

Olá pessoal, tudo bom?

Na single-imoveis.php eu gostaria de incluir um espaço para imóveis que são próximos do imóvel em questão.

Por exemplo, o imóvel que está sendo visto pelo usuário fica na cidade de São Paulo. Na seção de imóveis próximos, é mostrado os imóveis da cidade de Guarulhos, Osasco, etc (grande SP).

Cada imóvel já tem sua respectiva tag de cidade , e eu gostaria de dividir as cidades em dois grupos: interior e grande-sp.

Como eu consigo exibir os imóveis próximos dentro da single.php de acordo com o grupo do imóvel? Sei que preciso criar esses dois grupos como taxonomia, mas como criar esta condição?

O mais próximo que cheguei fui isso:

<section class="imoveis_box">
    <?php
        $empreendimentos = new WP_Query(array(
            'post_type'      => 'imoveis',
            'tax_query'      => array(
                'relation' => 'and',
                array(
                    'taxonomy' => 'cidades',
                    'field'    => 'term_id',
                    'terms'    => array( 14 ),
                ),
            ),
            'post_status'    => 'publish',
            'posts_per_page' => '4',
            'orderby'        => 'rand',
            'post__not_in'   => array($post->ID)
        ));

        if($empreendimentos->have_posts()) : 
            while($empreendimentos->have_posts()) : $empreendimentos->the_post();
                $imagem = get_field('imagem_destacada');
    ?>
    <div class="empreendimentos_item" style="background-image: url(<?php echo $imagem['url']; ?>);">
        <div class="empreendimentos_item__title">
            <h3><?php the_title(); ?></h3>
            <p><?php the_field('subtitulo'); ?></p>
        </div>
        <div class="empreendimentos_item__hovered">
            <div class="empreendimento__wrap">
                <p class="empreendimento_name"><?php the_title(); ?></p>
                <p class="empreendimento_city"><?php the_field('bairro_cidade'); ?></p>
                <p class="empreendimento_desc"><?php the_field('descricao_rapida'); ?></p>
                <p class="empreendimento_info"><?php the_field('subtitulo'); ?></p>
                <p class="empreendimento_size"><?php the_field('metragem'); ?></p>
            </div>
            <div class="empreendimento__action">
                <a href="<?php the_permalink(); ?>" class="btn btn-lg btn-danger">Saiba mais</a>
            </div>
        </div>
    </div>
    <?php
            endwhile;
        endif;
    ?>
</section>
7 respostas

Oi André, esse já é o loop que mostra os imóveis próximos é isso? Ali no terms você está passando 14 mas quer que esse seja o que? O código da cidade do imóvel atual no single?

Sim, é o loop que mostra os imóveis próximos.

O número "14" é o id da tag "interior".

Andre, você pode recuperar esse valor pela função wp_get_post_terms (https://codex.wordpress.org/Function_Reference/wp_get_post_terms) onde nela você informa o id do post atual e a taxonomia, além de algumas regras para definir que campos quer como resultado e dai obter o id e usar no seu filtro.

Pegou a ideia? Da uma olhada no link

Opa Wanderson, desculpe pela demora!

Achei interessante, mas não sei se utilizei a função da forma correta, não trouxe o resultado esperado. Segue código:

<?php
    $empreendimentos = wp_get_post_terms( $post->ID, 'cidades', array( 'post_type'=>'empreendimento', 'posts_per_page'=>'4', 'orderby'=>'rand') );
    if($empreendimentos->have_posts()) : 
        while($empreendimentos->have_posts()) : $empreendimentos->the_post();
?>

<?php
        endwhile;
    endif;
?>

Fiz do jeito certo?

solução!

Opa, não andré, a função que te passei não substitui o código do loop. Ela vai auxiliar você a pegar o term_id lá do $args que tá fixo como 14. Abaixo eu ilustro o uso, mas você deve verificar ai corretamente se é isso mesmo:

<?php

$terms = wp_get_post_terms( $post->ID, 'cidades');
$termId = $terms[0]->term_id;

$empreendimentos = new WP_Query(array(
    'post_type'      => 'imoveis',
    'tax_query'      => array(
        'relation' => 'and',
        array(
            'taxonomy' => 'cidades',
            'field'    => 'term_id',
            'terms'    => array( $termId ),
        ),
    ),
    'post_status'    => 'publish',
    'posts_per_page' => '4',
    'orderby'        => 'rand',
    'post__not_in'   => array($post->ID)
));

if($empreendimentos->have_posts()) : 
    while($empreendimentos->have_posts()) : $empreendimentos->the_post(); 

?>

        // html aqui

<?php
    endwhile;
endif;

Wow! Wanderson!

Valeu, deu certo. Só tive que trocar a posição do array de 0 para 1 para que a taxonomia certa fosse recuperada.

Óotemoo!