Obtener el slug del término del post actual

23 ene 2014, 18:17:42
Vistas: 66.9K
Votos: 7

Estoy trabajando en una plantilla de tipo de post individual donde muestro un menú de navegación con enlaces a todas las entradas del mismo término.

Ahora quiero usar esta plantilla para todos los diferentes términos así que $term_slug necesita contener el slug del término del post actual para que pueda corresponder con los otros posts.

He encontrado muchas veces en internet este código para hacer el trabajo pero no funciona para mí:

$terms = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$term_slug = $term->slug;

Este artículo dice que esto haría el trabajo: http://www.wpbeginner.com/wp-themes/how-to-show-the-current-taxonomy-title-url-and-more-in-wordpress/

¿Qué estoy haciendo mal?

$args = array(
    'post_type'     => 'myposttype', // tipo de post personalizado
    'mytaxonomy'    => $term_slug,   // taxonomía personalizada
    'order'         => 'ASC'         // ordenar ascendentemente
);              

$current_id = get_the_ID();
$the_query = new WP_Query( $args );
if($the_query->have_posts() ) {
    while ($the_query->have_posts()) { $the_query->the_post();

        echo '<li><a' . ($current_id == $post->ID ? ' class="current"' : '') . ' href=" ' . get_permalink() . ' ">' . get_the_title() . '</a></li>'; 

    } 
}
0
Todas las respuestas a la pregunta 3
3
21

Tu código funciona en una página donde se consulta un término (un archivo de términos de taxonomía), no en una entrada individual.

Para una entrada individual, necesitas obtener los términos que pertenecen a esa entrada.

$terms = get_the_terms( $post->ID, 'tu-taxonomia' );
if ( !empty( $terms ) ){
    // obtener el primer término
    $term = array_shift( $terms );
    echo $term->slug;
}
23 ene 2014 18:28:53
Comentarios

¡Gracias! No entiendo exactamente lo que estás haciendo pero funciona.

Robbert Robbert
24 ene 2014 11:35:27

¡Solución increíble! Intenté usar la documentación para obtener todos los términos pero no tuve éxito. ¿Conoces alguna forma de hacer eso? http://codex.wordpress.org/Function_Reference/get_term

GuiHarrison GuiHarrison
2 mar 2015 05:31:55

@GuiHarrison En mi opinión, entonces necesitas dejar array_shift() fuera y recorrer el array $term.

Robbert Robbert
6 may 2015 13:24:31
0

El siguiente código funciona bien si tienes múltiples términos para mostrar:

echo get_the_term_list( 
    $post->ID, 
    'styles', 
    '<ul class="styles"><li>', 
    ',</li><li>', 
    '</li></ul>' 
);
31 ene 2016 11:57:30
0

No necesitas un bucle for.

$slugs = wp_get_post_terms($post_id,'your-taxonomy',['fields'=>'slugs']);

$slugs será un array de slugs de your-taxonomy que están asignados al post con $post_id

Fuentes:

25 nov 2020 19:14:36