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="https://wordpress.stackexchange.com/questions/130947/" . get_permalink() . "https://wordpress.stackexchange.com/questions/130947/">' . get_the_title() . '</a></li>';
}
}
3 s
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;
}