7

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>'; 

    } 
}
19

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;
}
| improve this answer | |
  • Thanks! Doesn't understand exactly what you are doing but it works. – Robbert Jan 24 '14 at 9:35
  • Amazing solution! I tried to use documentation to get all the terms but no dice. Do you know a way to do that? codex.wordpress.org/Function_Reference/get_term – GuiHarrison Mar 2 '15 at 3:31
  • @GuiHarrison In my opinion then you need to leave array_shift() away, and loop through the $term array. – Robbert May 6 '15 at 10:24
0

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>' 
); 
| improve this answer | |
0

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:

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.