¿Cómo listar términos de taxonomía personalizada sin hipervínculos?

21 jul 2011, 03:20:31
Vistas: 19.9K
Votos: 5

He buscado por todas partes tratando de encontrar una respuesta a mi pregunta. Espero poder obtener ayuda aquí. Aquí va...

Actualmente estoy recuperando los términos de mi taxonomía personalizada usando:

<?php echo get_the_term_list( $post->ID, 'skills', '<ul><li>', '</li><li>', '</li></ul>' ); ?>

Lo que estoy tratando de hacer es recuperar estos mismos términos de taxonomía personalizada específicos de la entrada en una lista sin que se muestren como enlaces. He probado todas las siguientes "soluciones", pero ninguna funciona. Agradecería cualquier ayuda.

Devuelve los términos específicos de la entrada en una cadena larga que no se puede poner en una lista:

$terms_as_text = get_the_term_list( $post->ID, 'skills', '<ul><li>', '</li><li>', '</li></ul>' ) ;
echo strip_tags($terms_as_text);

Devuelve una lista de todos los términos utilizados en todos los tipos de entrada personalizados:

<ul>
<?php $args = array( 'taxonomy' => 'skills', 'orderby' => 'ID', 'order' => 'ASC' );
$categories = get_categories( $args );
foreach($categories as $category) { echo '<li> '. $category->name . '</li>'; } 
                ?>
</ul>

No devuelve nada:

<?php $args = array('orderby' => 'name', 'order' => 'ASC', 'fields' => 'all');
wp_get_object_terms( $post->ID, $skills, $args );
?>

Incluso he probado get_the_terms, get_terms, y get_categories sin éxito.

1
Comentarios
Todas las respuestas a la pregunta 8
5
11

Puedes probar esto:

$terms = get_the_terms($post->id, 'skills');
if (!is_wp_error($terms)) : ?>

<?php 
    $skills_links = wp_list_pluck($terms, 'name'); 

    $skills_yo = implode(", ", $skills_links);
    ?>

    <span><?php echo $skills_yo; ?></span>
21 jul 2011 08:11:35
Comentarios

Actualicé el ejemplo en la página de get_the_terms. No estoy seguro de qué se supone que hace ese unset para empezar...

t31os t31os
21 jul 2011 12:59:43

Yo tampoco lo sabía pero fue un copiar/pegar perezoso

Wyck Wyck
21 jul 2011 17:54:58

Gracias a ambos @t31os y Wyck por la ayuda. Este es el código con el que terminé, basado en aquí y en el codex.

'<?php $terms = get_the_terms( $post->id, 'skills' );
if ( !is_wp_error($terms)) :
$skills_links = array();
foreach ($terms as $term) {
$skills_links[] = $term->name;
$skills = join( "</li><li>", $skills_links );
?>
<ul><li><?php echo $skills; ?></li></ul>
<?php endif ?>'

Certified K Certified K
22 jul 2011 19:53:35

Disculpa por la mala publicación. No puedo entender cómo formatearlo para que sea más legible.

Certified K Certified K
22 jul 2011 19:55:43

me encanta esta respuesta - código limpio y útil.

Sagive Sagive
8 ene 2015 15:30:10
0

Solo usa strip_tags

<?php echo strip_tags(get_the_term_list( $post->ID, 'CUSTOM-TAXONOMY', ' ',', ')); ?>
18 abr 2016 21:28:48
1
$terms = wp_get_post_terms($post->ID, 'TAXONOMYNAME');
$count = count($terms);
if ( $count > 0 ) {
    foreach ( $terms as $term ) {
        echo $term->name . ", ";
    }
}
5 mar 2012 01:12:50
Comentarios

El último también tiene una coma...

Sergi Sergi
26 mar 2019 18:20:07
0
// Función para limpiar y mostrar los términos de una taxonomía específica de un post
function term_clean($postid, $term)
{
    // Obtener los términos asociados al post para la taxonomía especificada
    $terms = get_the_terms($postid, $term); 
    
    // Recorrer cada término y mostrar su nombre
    foreach ($terms as $term) {  
        echo $term->name;   
    };

}
18 ago 2011 16:33:10
0

Si solo quieres los términos asignados a una publicación específica:

<?php $object_terms = wp_get_object_terms( $post_id, 'skills', array( 'fields' => 'names' ) );
if ( $object_terms ) { ?><ul><li><?php echo implode( '</li><li>', $object_terms ); ?></li></ul><?php } ?>

Si quieres TODOS los términos:

<?php $all_terms = get_terms( 'skills', array( 'fields' => 'names' ) );
if ( $all_terms ) { ?><ul><li><?php echo implode( '</li><li>', $all_terms ); ?></li></ul><?php } ?>
14 mar 2012 04:51:54
0

Ayer me encontré con un problema similar y llegué a la siguiente solución:

function taxonomy_list( $taxonomy ) {
    $args = array('order'=>'ASC','hide_empty'=>false);
    $terms = get_terms( $taxonomy, $args );
    if ( $terms ) {
        printf( '<ul name="%s">', esc_attr( $taxonomy ) );
        foreach ( $terms as $term ) {
            printf( '<li>%s</li>', esc_html( $term->name ) );
        }
        print( '</ul>' );
    }
}

Luego, solo pega <?php taxonomy_list( 'ID DE TAXONOMÍA' ); ?> en tu archivo de plantilla, reemplazando ID DE TAXONOMÍA con el nombre de la taxonomía que corresponda.

Mi uso original fue para crear una lista de las categorías de empleos que tengo en mi bolsa de trabajo. Cada una enlazaba al archivo de la taxonomía. Puedes ver la función completa en mi respuesta a mi propia pregunta en Stackoverflow.

3 dic 2013 19:33:06
0
// para mostrar términos de taxonomía sin enlaces: separados con comas
// copia este código en tu function.php

function get_taxonony_toDisplay($post_id, $taxonomy_name) {
$terms = wp_get_post_terms($post_id, $taxonomy_name);
$count = count($terms);
if ( $count > 0 ) {
    foreach ( $terms as $term ) {
        echo $term->name . ", ";
    }
}
}

Como necesitaba mostrar 3 taxonomías separadas con comas, creé una función usando el código de Henry.

Para mostrar usa la siguiente línea:

<?php get_taxonony_toDisplay($post->ID, 'nombre_de_tu_taxonomia' ); ?> 
13 feb 2014 10:14:48
0

Si deseas ordenar los términos por slug en lugar de por nombre, utiliza esto...

<?php if(has_term('', 'CUSTOM-TAX')) {?> 
<?php
    $custom_terms = get_the_terms( get_the_ID(), 'CUSTOM-TAX' );
    // Asegurarse de que tenemos términos y también verificar el objeto WP_Error
    if (    $product_terms
    && !is_wp_error( $product_terms )
    ) {
    @usort( $product_terms, function ( $a, $b )
    {
    return strcasecmp( 
    $a->slug,
    $b->slug
    );
    });
    // Mostrar tus términos normalmente
    $term_list = [];
    foreach ( $custom_terms as $term ) 
    //$term_list[] = esc_html( $term->name );  // comenta esta línea si quieres los términos enlazados y viceversa
    $term_list[] = '<a href="' . get_term_link( $term ) . '">' . esc_html( $term->name ) . '</a>'; // comenta esta línea si NO quieres los términos enlazados y viceversa
    echo implode( ', ', $term_list );
    }
?>                          
<?php } else { ?><?php }?>
13 jun 2016 11:35:40