Uso de un bucle para mostrar los términos asociados con una publicación

2

Estoy usando un tipo de publicación personalizada y taxonomías personalizadas, y uso lo siguiente para mostrar los términos de las taxonomías en la página de la publicación:

the_terms( $post->ID, 'taxname', 'beforetext', ', ');

¿Hay una manera de recorrer todas las taxonomías asignadas a esta publicación y mostrar los términos en una lista desordenada, en lugar de una línea separada en functions.php para cada taxonomía? Sospecho que esto se puede hacer con un bucle foreach, pero no conozco la sintaxis correcta.

    
pregunta Travis Northcutt 02.02.2011 - 22:12

3 respuestas

7

Esta respuesta fue un esfuerzo conjunto con tnorthcutt, así que la hice wiki de la comunidad .

Hay varias funciones interesantes disponibles: the_taxonomies() , que llama a get_the_taxonomies() , que a su vez llama a get_object_taxonomies() y wp_get_object_terms() .

  • the_taxonomies() es una etiqueta de plantilla documentada y es una envoltura ligera alrededor de una llamada a get_the_taxonomies() , que está sin documentar.

  • get_object_taxonomies() devuelve una lista de taxonomías asociadas (como nombres simples o como objetos), que podrían Ser muy útil en ciertas situaciones. Está documentado, pero es fácil perderse esta función porque nada se vincula con ella en el Codex. Solo lo encontré al leer wp-includes/taxonomy.php . Hay una función de envoltura no documentada alrededor de esta, get_post_taxonomies() , que por defecto es la publicación actual.

  • wp_get_object_terms() hace la mayor parte del trabajo pesado. Tiene dos parámetros muy interesantes : una matriz (!) De identificadores de objeto y una matriz (!) De nombres de taxonomía. Termina generando un SELECTO de apariencia moderadamente malvada y devuelve una serie de términos (como nombres, objetos o ... lee los documentos) para el (los) objeto (s) dado dentro de la (s) taxonomía (es) dada (s).

Si necesita un formato más complejo del que está disponible a través de the_taxonomies() , conocer estas funciones "internas" debería resultar útil.

    
respondido por el Peter Rowell 03.02.2011 - 20:39
2

Yo pienso lo que estás buscando es get_the_term_list. Dale una oportunidad a

get_the_term_list( $post->ID, 'taxname', '', ', ', '');

de lo contrario, esta función puede tirar de ellos. simplemente no estoy seguro de cómo se escupirán en términos de marcado

get_terms( $taxonomy, array( 'hide_empty' => false ) );
    
respondido por el Norcross 02.02.2011 - 22:23
0

Esto funciona bastante bien en cualquier taxonomía personalizada (no tiene que especificar el nombre de la taxonomía).

Es posible que necesite global $post; o no, dependiendo de dónde planea colocar este código.

global $post;
// get the post type
$post_type = get_post_type( get_the_ID() );
// go to taxonomies array
$post_type_taxonomies = get_object_taxonomies( $post_type );

// if we have any taxonomy
if ( ! empty( $post_type_taxonomies ) ) {

    echo '<ul>';

    // loop through each of them
    foreach ( $post_type_taxonomies as $taxonomy ) {
        // get terms list for each taxonomy
        $terms = get_the_term_list( get_the_ID(), $taxonomy, '', '</li><li>', ''  );

        // show only those terms that are assigned to post 
        if ( $terms ) {
            echo '<li>' . $terms . '</li>';
        }
    }

    echo '</ul>';
}
    
respondido por el zzap 05.09.2013 - 17:44

Lea otras preguntas en las etiquetas