Suporte » Temas » Listar custom taxonomies de um Post.

  • Resolvido marioernestoms

    (@marioernestoms)


    Boa Tarde Pessoal,

    Estou quebrando a cabeça com uma listagem na single de um custom post type.

    Tenho um custom post Livros e nesse custom post tem uma custom taxonomy Generos.

    essa custom taxonomy tem até 3 níveis
    ex:

    Artes Cênicas
     - Dança
       -- Clássica & Balé 

    Porém um Livro pode ter mais que uma árvore dessas ex:

    Livro = Teste
    Arvore 1:
    Artes Cênicas
     - Dança
       -- Clássica & Balé 
    Arvore 2:
    Arte
     - Africana

    Para exibir os gêneros de primeiro nível eu to usando:

    $terms = get_the_terms( $post->ID, 'ger_generos' );
    foreach ( $terms as $term ) {
      //aqui vai um echo do $term->name;
    }

    Isso funciona perfeito e consigo exibir os termos de 1 nivel dos Livros.
    e recebo algo como:

    Arte
    Artes Cênicas

    Porém quando eu tento exibir os termos parent e grandparents os termos vem todos misturados algo como:

    Arte
    Africana
    Dança
    Artes Cênicas
    Clássica & Balé
    Artes Cênicas
    Dança

    Eu preciso que sexa exibido respeitando as hierarquias ex:

    Artes Cênicas
     Dança
      Clássica & Balé 
    
    Arte
     Africana

    Coloquei o código que to usando no pastebin:

    https://pastebin.com/GPFpUA3j

    Alguém tem alguma luz?

Visualizando 5 respostas - 1 até 5 (de um total de 5)
  • Moderador Felipe Elia

    (@felipeelia)

    Chegou a tentar o código desse comentário aqui, Mario? No seu caso ficaria alguma coisa mais ou menos assim:

    
    $taxonomy = 'ger_generos';
     
    // Get the term IDs assigned to post.
    $post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
     
    // Separator between links.
    $separator = ', ';
     
    if ( ! empty( $post_terms ) && ! is_wp_error( $post_terms ) ) {
     
        $term_ids = implode( ',' , $post_terms );
     
        $terms = wp_list_categories( array(
            'title_li' => '',
            'style'    => 'none',
            'echo'     => false,
            'taxonomy' => $taxonomy,
            'include'  => $term_ids
        ) );
     
        $terms = rtrim( trim( str_replace( '<br />',  $separator, $terms ) ), $separator );
     
        // Display post categories.
        echo  $terms;
    }
    

    (troquei o nome da taxonomia só).

    Depois diz aqui se funcionou!

    @felipeelia Com post funciona, mas com custom post type nao funciona. não lista nada.

    dou um var_dump em $post_terms o array vem vazio:

    array(0) { }

    @felipeelia Funcionou!!!

    Não é a melhor prática do mundo mas passei a global $post no inicio do código e funcionou de boa.

    global $post;
    $taxonomy = 'ger_generos';
    
    // Get the term IDs assigned to post.
    $post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
    
    // Separator between links.
    $separator = ', ';
    
    if ( ! empty( $post_terms ) && ! is_wp_error( $post_terms ) ) {
    
    	$term_ids = implode( ',' , $post_terms );
    
    	$terms = wp_list_categories( array(
    		'title_li' => '',
    		'style'    => 'none',
    		'echo'     => false,
    		'taxonomy' => $taxonomy,
    		'include'  => $term_ids
    	) );
    
    	$terms = rtrim( trim( str_replace( '<br />',  $separator, $terms ) ), $separator );
    
    	// Display post categories.
    	echo  $terms;
    } 

    Mas uma outra coisa que eu queria é que o resultado separasse os termos pelo parent em linhas diferentes.

    ta vindo assim:
    Arte, Africana, Artes Cênicas, Dança, Clássica & Balé

    queria que viesse:
    Artes Cênicas
    Dança
    Clássica & Balé

    Arte
    Africana

    nesse caso de uso Artes Cênicas e Arte são parent == 0

    • Esta resposta foi modificada 3 meses, 1 semana atrás por marioernestoms.
    • Esta resposta foi modificada 3 meses, 1 semana atrás por marioernestoms.

    @felipeelia Muito obrigado pela clareada, você mostrou o caminho eu apenas trilhei. dei umas modificadas, alterei os paramêtros. entendi como a função funciona e consegui montar.

    resultado ficou algo assim que óbviamente ainda vou corrigir a impressão.

    global $post;
    $taxonomy = 'ger_generos';
    
    // Get the term IDs assigned to post.
    $post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
    
    // Separator between links.
    $separator = ' / ';
    
    if ( ! empty( $post_terms ) && ! is_wp_error( $post_terms ) ) {
    
    	$term_ids = implode( ',' , $post_terms );
    
    	$my_cat_menu = array(
    		'hierarchical' => 'true',
    		'title_li'     => '',
    		'taxonomy'     => $taxonomy,
    		'include'      => $term_ids,
    	);
    
    		echo '<ul class="my-categories-menu">';
    		wp_list_categories( $my_cat_menu );
    		echo '</ul>';
    }

    muito obrigado mano!

    • Esta resposta foi modificada 3 meses, 1 semana atrás por marioernestoms.
    Moderador Felipe Elia

    (@felipeelia)

    Opa, que maravilha! Parabéns por ter resolvido e precisando é só criar outro tópico aqui. Abraços!

Visualizando 5 respostas - 1 até 5 (de um total de 5)
  • Você deve estar conectado para responder a este tópico.