Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
19
respostas

Aula 5 - Taxonomia

Olá pessoal, tudo bem?

Eu gostaria de imprimir a categoria do meu imóvel na sua página (como normalmente blogs possuem uma âncora que direciona para página das tags).

Como eu posso fazer isso?

Eu dei uma lida no get_terms() (https://developer.wordpress.org/reference/functions/get_terms/), mas não entendi a utilidade dos seus parâmetros. O que eu consegui foi imprimir todas as tag's sem ser uma âncora que direciona para o link da tag.

O código que fiz, foi:

<?php
   $categorias = get_terms('empreendimentos', array(
      'hide_empty' => false,
      'orderby' => 'menu_order'
   ));
   foreach($categorias as $categoria){
      $icone = get_field('icone', 'empreendimentos_'.$categoria->term_id);
      if(get_field('exibir_na_listagem', 'empreendimentos_'.$categoria->term_id)) {
?>

<a src=""><?php echo $categoria->name; ?></a>
<?php 
   }
      } 
?>

Desde já, grato!

19 respostas

Fala ai André, no tema que eu fiz para meu blog no wordpress eu consegui fazer a impressão das tags da seguinte maneira:

<aside class="o-sidebar">
    <label class="o-sidebar__title">Tags</label>
    <?php
        $tags = get_tags();
        foreach($tags as $tag) :
    ?>
    <a class="o-post__tag" href="<?=get_tag_link($tag->term_id);?>" role="link"><?=$tag->name;?></a>
    <?php
        endforeach
    ?>
</aside>

Arquivo completo com outras impressões pode ser encontrado aqui

Abraçooos

Matheus, valeu pela ajuda!

Mas, fazendo da sua forma, as tags nem apareceram na página =/

Você ja criou as tags ?

Da algum erro no console ?

Sim, elas já estavam criadas e os posts tbm com tags selecionadas.

O Console não retornou nenhum erro.

Segue código que testei:

<?php
   $categorias = get_tags();
   foreach ($categorias as $categoria) :
?>

<span class="label"><?php echo $categoria->name; ?></span>

<?php
   endforeach
?>

André para testar se esta conseguindo pegar as tags imprima o conteúdo do array:

<?php
    $categorias = get_tags();
    dd($categorias);
    ....
?>

Matheus, fiz este teste e na página apareceu "Array" e não o seu conteúdo.

Isso pode estar acontecendo por conta do uso do plugin Advanced Custom Fields PRO (https://www.advancedcustomfields.com/) ? Utilizo para facilitar a criar dos campos do Post Type.

Segue o código testado:

<div class="page_produto__top_left d-flex flex-column">
   <div class="page_produto__top_left d-flex flex-column">
      <div>
         <?php $categorias = get_tags();    ?>
         <span class="label"><?php echo $categorias; ?></span>
     </div>
   </div>
</div>

Alguém?

Tente usar as tags padrão do Wordpress, deve resolver o problema.

Eu usei a "get_terms()", como coloquei no tópico:

<?php
   $categorias = get_terms('empreendimentos', array(
      'hide_empty' => false,
      'orderby' => 'menu_order'
   ));
   foreach($categorias as $categoria){
      $icone = get_field('icone', 'empreendimentos_'.$categoria->term_id);
      if(get_field('exibir_na_listagem', 'empreendimentos_'.$categoria->term_id)) {
?>

<a src=""><?php echo $categoria->name; ?></a>
<?php 
   }
      } 
?>

Estava pensando, teria uma forma de imprimir a tag especifica do post usando o "get_terms"?

Desde, já grato!

Você consegue pegar todas as tags de uma post passando o ID dele:

$tags = wp_get_post_tags(get_the_ID());

Depois faça o foreach e imprima as tags.

Matheus,

Mais uma vez não imprimiu e no Console não traz nenhum erro. Estou postando aqui os meus códigos para tentarmos descobrir se o problema esta no algoritmo:

<div>
   <?php
      $categorias = wp_get_post_tags(get_the_ID());
      foreach($categorias as $categoria){
         $icone = get_field('icone', 'empreendimentos_'.$categoria->term_id);
           if(get_field('exibir_na_listagem', 'empreendimentos_'.$categoria->term_id)){
   ?>
   <span class="label"><?php echo $categoria->name; ?></span>
   <?php 
           }
       } 
   ?>
</div>

Lembrando que para o get_the_ID deve estar dentro do while do have_post

Talvez o problema seja novamente o plugin que você esta utilizando, pois todos os códigos que estou lhe passando no meu tema funciona.

O "get_the_ID" deve estar assim?

<?php
            if(have_posts()){
                while(have_posts()){ the_post(get_the_ID());
                }
            }
?>

Segue exemplo do meu tema:

<?php
    $tags = wp_get_post_tags(get_the_ID());
    foreach($tags as $tag) :
?>
 <a class="o-post__tag" href="<?=get_tag_link($tag->term_id);?>" role="link"><?=$tag->name;?></a>
<?php
    endforeach
?>

Lembrando: Esse código esta dentro do while que você postou acima.

Você pode ver ele funcionando no meu blog:

Matheus, novamente não rolou =/

Segue o teste da sua última solução:

<?php
   if (have_posts()) {
      while (have_posts()) {
         the_post();
?>
<div>
   <?php
      $tags = wp_get_post_tags(get_the_ID());
      foreach($tags as $tag) :
   ?>
   <a href="<?=get_tag_link($tag->term_id);?>" role="link"><?=$tag->name;?></a>
   <?php
      endforeach
   ?>
</div>
<?php
       }
   }
?>

Temos a opção de tentar usar este método que funciona no seu blog usando no código que funciona no meu? Você poderia mais uma vez me ajudar?

Como eu poderia usar o "wp_get_post_tags" e o "get_the_ID" dentro do meu código? Segue o código que comentei acima:

<?php
   $categorias = get_terms('empreendimentos', array(
      'hide_empty' => false,
      'orderby' => 'menu_order'
   ));
   foreach($categorias as $categoria){
      $icone = get_field('icone', 'empreendimentos_'.$categoria->term_id);
      if(get_field('exibir_na_listagem', 'empreendimentos_'.$categoria->term_id)) {
?>

<a src=""><?php echo $categoria->name; ?></a>
<?php 
   }
      } 
?>

Muito obrigado mais uma vez!

Alguém?

solução!

Desculpa a demora, esta corrido por aqui, acho que o melhor caminho seria você testar sem o plugin que esta usando.

Beleza,

Ficou corrido para mim tbm, vou testar e posto aqui.

Combinado.