mostra tags do tipo de postagem personalizado APENAS

4

Eu tenho um tipo de postagem personalizado com tags incluídas como uma taxonomia. Estou tentando exibir uma lista de todas as tags que estão apenas no tipo de postagem personalizada. Eu usei inicialmente:

wp_tag_cloud();

que gera a lista de tags com links finos, mas mostra as tags das postagens normais com ele. Eu tentei consultar as postagens assim:

query_posts( array( 'post_type' => 'archive' ) );
if ( have_posts() ) : 
    while ( have_posts() ) : 
        the_post();
        the_tags('<ul><li>','</li><li>','</li></ul>');
        wp_reset_query();
    endwhile; 
endif;

mas mostra as tags em cargas duplicadas. Por exemplo, se eu tivesse a tag como test , diria test , test , test e assim por diante.

Este é o código que declara as tags

'taxonomies' => array('post_tag')

Alguém conhece uma maneira de exibir uma lista de tags específicas apenas do meu tipo de postagem personalizada?

    
por user34466 24.06.2013 / 10:08

4 respostas

6

As soluções acima funcionam corretamente, mas não são exatamente otimizadas. Aqui está um método que consulta o banco de dados UMA VEZ para os dados que você está procurando e fornece uma lista de objetos de termo. Ele pode aceitar um argumento post_type e, se um não for fornecido, usará o post_type do objeto global $ post atual.

function post_type_tags( $post_type = '' ) {
    global $wpdb;

    if ( empty( $post_type ) ) {
        $post_type = get_post_type();
    }

    return $wpdb->get_results( $wpdb->prepare( "
        SELECT COUNT( DISTINCT tr.object_id ) 
            AS count, tt.taxonomy, tt.description, tt.term_taxonomy_id, t.name, t.slug, t.term_id 
        FROM {$wpdb->posts} p 
        INNER JOIN {$wpdb->term_relationships} tr 
            ON p.ID=tr.object_id 
        INNER JOIN {$wpdb->term_taxonomy} tt 
            ON tt.term_taxonomy_id=tr.term_taxonomy_id 
        INNER JOIN {$wpdb->terms} t 
            ON t.term_id=tt.term_taxonomy_id 
        WHERE p.post_type=%s 
            AND tt.taxonomy='post_tag' 
        GROUP BY tt.term_taxonomy_id 
        ORDER BY count DESC
    ", $post_type ) );
}

Então, se você chamasse post_type_tags( 'archive' ) , por exemplo, você obteria uma lista de objetos de termo para post_tag em ordem decrescente de popularidade para os tipos de postagem "arquivados".

Você pode então emitir sua lista de links da seguinte forma:

$archive_tags = post_type_tags( 'archive' );

foreach( $archive_tags as $tag ) {
    echo '<a href="' . get_tag_link( $tag->term_id ). '">' . esc_html( $tag->name ) . '</a>';
}
    
por Bendoh 20.01.2014 / 17:52
-1
query_posts( 'post_type'=> 'custom_post_type_name' );
     if ( have_posts() ) : while ( have_posts() ) : the_post();
     $custom_post_tags = get_the_tags();
     if ( $custom_post_tags  ) {
        foreach( $custom_post_tags as $tag ) {
           $tags_arr[] = $tag -> name; 
        }
     }
     endwhile; endif;
     if( $tags_arr ) {
         $uniq_tags_arr = array_unique( $tags_arr );
         foreach($tags_arr as $tag ) {
             // LIST ALL THE TAGS FOR DESIRED POST TYPE
             $sanitizeTag =  sanitize_title($tag);

$current_tag = get_term_by('name', $tag, 'post_tag');

             echo '<a href="' . get_tag_link($current_tag->term_id). '">' .$tag. '</a>';
         }
    }

Isso fornecerá a lista de tags com os links para a tag.

    
por Rohit Pande 24.06.2013 / 13:03
-1
 
     query_posts( 'post_type'=> 'custom_post_type_name' );
     if ( have_posts() ) : while ( have_posts() ) : the_post();
     $custom_post_tags = get_the_tags();
     if ( $custom_post_tags  ) {
        foreach( $custom_post_tags as $tag ) {
           $tags_arr[] = $tag -> name; 
        }
     }
     endwhile; endif;
     if( $tags_arr ) {
         $uniq_tags_arr = array_unique( $tags_arr );
         foreach( $uniq_tags_arr as $tag ) {
             // LIST ALL THE TAGS FOR DESIRED POST TYPE
             $tag_link = get_term_by('name', $tag, 'post_tag');
             echo 'term_id). '" title="'.$tag.'">' .$tag. '';
         }
    }
    
por S kumar 24.06.2013 / 11:57
-1

@ user34466 Isso deve funcionar para resolver o problema duplicado:

                <ul>
            <?php
                query_posts(array( 'post_type'=> 'work' ));
                if ( have_posts() ) : while ( have_posts() ) : the_post();
                    $custom_post_tags = get_the_tags();
                if ( $custom_post_tags ) {
                    foreach( $custom_post_tags as $tag ) {
                        $tags_arr[] = $tag -> name;
                    }
                }
                endwhile; endif;
                if( $tags_arr ) {
                    $uniq_tags_arr = array_unique( $tags_arr );
                 foreach( $uniq_tags_arr as $tag ) {
                     // LIST ALL THE TAGS FOR DESIRED POST TYPE
                     $sanitizeTag =  sanitize_title($tag);
                     $tag_link = get_term_by('name', $tag, 'post_tag');
                     echo '<li><a href="'. get_tag_link($tag_link->term_id).'">' .$tag. '</a></li>';
                     }
                 }
             ?>
            </ul>

Boa sorte!

    
por Danny 30.07.2013 / 21:51