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: /
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>';
}
}
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/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>';
}
}
Share
Improve this question
asked Jan 23, 2014 at 16:17
RobbertRobbert
1,2756 gold badges23 silver badges47 bronze badges
3 Answers
Reset to default 21Your 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;
}
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:
- https://developer.wordpress/reference/functions/wp_get_post_terms/
- https://developer.wordpress/reference/classes/wp_term_query/__construct/