mostrar etiquetas del tipo de publicación personalizada SOLAMENTE

4

Tengo un tipo de publicación personalizado con etiquetas incluidas como taxonomía. Estoy tratando de mostrar una lista de todas las etiquetas que están en el tipo de publicación personalizada solamente. Inicialmente utilicé:

wp_tag_cloud();

que genera la lista de etiquetas con enlaces finos pero muestra las etiquetas de las publicaciones normales con ella. Intenté consultar las publicaciones como esta:

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;

pero muestra las etiquetas en cargas duplicadas. por ejemplo, si tuviera la etiqueta como test , diría que test , test , test y así sucesivamente.

Este es el código que declara las etiquetas

'taxonomies' => array('post_tag')

¿Alguien sabe una forma de mostrar una lista de etiquetas que son específicas para mi tipo de publicación personalizada?

    
pregunta user34466 24.06.2013 - 10:08

4 respuestas

6

Las soluciones anteriores funcionan correctamente pero no están optimizadas exactamente. Aquí hay un método que consulta esa base de datos UNA VEZ para obtener los datos que está buscando y le proporciona una lista de objetos de términos. Puede aceptar un argumento post_type, y si no se proporciona uno, usará el post_type del objeto global $ post actual.

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 ) );
}

Entonces, si llama a post_type_tags( 'archive' ) , por ejemplo, obtendría una lista de objetos de término para post_tag en orden de popularidad descendente para los tipos de publicación 'archivados'.

A continuación, puede emitir su lista de enlaces de la siguiente manera:

$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>';
}
    
respondido por el 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>';
         }
    }

Esto le dará la lista de etiquetas con los enlaces a la etiqueta.

    
respondido por el 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. '';
         }
    }
    
respondido por el S kumar 24.06.2013 - 11:57
-1

@ user34466 Esto debería funcionar para resolver el 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>

¡Buena suerte!

    
respondido por el Danny 30.07.2013 - 21:51

Lea otras preguntas en las etiquetas