Get term slug of current post
-
21-04-2021 - |
Question
I am working on a single post type template where I show a navigation menu with links to all the posts from the same term.
Now I want to use this template for all the different terms so $term_slug needs to hold the term slug of the current post so they can correspond to the other posts.
I have found many times over the internet this code to do the job but it doesn't work for me:
$terms = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$term_slug = $term->slug;
This article says that this would do the job: http://www.wpbeginner.com/wp-themes/how-to-show-the-current-taxonomy-title-url-and-more-in-wordpress/
What am I doing wrong?
$args = array(
'post_type' => 'myposttype',
'mytaxonomy' => $term_slug,
'order' => 'ASC'
);
$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>';
}
}
La solution
Your code works on a page where a term is queried (a taxonomy term archive), not a single post.
For a single post, you need to fetch the terms belonging to that post.
$terms = get_the_terms( $post->ID, 'your-taxonomy' );
if ( !empty( $terms ) ){
// get the first term
$term = array_shift( $terms );
echo $term->slug;
}
Autres conseils
Below code works well if have multiple terms to show.:-
echo get_the_term_list(
$post->ID,
'styles',
'<ul class="styles"><li>',
',</li><li>',
'</li></ul>'
);
You don't need a for loop.
$slugs = wp_get_post_terms($post_id,'your-taxonomy',['fields'=>'slugs']);
$slugs
will be an array of your-taxonomy
slugs that are assigned to the post with $post_id
Sources: