get_post_terms not working as expected

I have a custom post type called “Fruit” and under this I have a hierarchical taxonomy called, “Fruit Categories”

When I create a new post under Fruit, I am able to assign it to a “term” – like you would with a normal post category, but under the Fruit Categories taxonomy.

I’ve added three posts to Fruit, with each assigned to a single term respectively; “Apples”, “Pears” and “Bananas”.

All this works fine, but now I want to create an archive page that simply lists the terms in a UL, for that custom post type, like so;

mysite.com/fruit

  • Apples
  • Pears
  • Bananas

This problem I am facing is that every query I have used only seems to return the first term, Apples. The other two are not showing and I’ve tried many code snippets, all with the same avail.

Some things I’ve tried;

    $term_list = wp_get_post_terms($post->ID, 'fruit_categories', array("fields" => "all"));  print_r($term_list);

And

$terms = wp_get_post_terms($post->ID,'fruit_categories');
$count = count($terms);

if ( $count > 0 ){
    echo "<ul>";
    foreach ( $terms as $term ) {
        echo '<li><a href="'.get_term_link($term->slug, 'fruit_categories').'" rel="nofollow noreferrer noopener">'. $term->name . "</a></li>";
    }
    echo "</ul>";
}

I also tried the tips suggested here, however, this still results in the same issue with just the first term being listed.

https://stackoverflow.com/questions/15502811/display-current-post-custom-taxonomy-in-wordpress

It’s a fresh install with no plugins.

Do I need to add a foreach loop to pull in the additional terms? Or is there something I am missing here?

I’ve also been looking at wp_get_object_terms but I don’t really understand how to use it.

When I do a screen dump, I get the following on mysite/fruit

Apples

Array ( [0] => stdClass Object ( [term_id] => 43 [name] => Apples[slug] => apples [term_group] => 0 [term_taxonomy_id] => 43 [taxonomy] => fruit_categories [description] => [parent] => 0 [count] => 2 ) )

For what it’s worth, here is my Custom Post Type and taxonomy registry code
http://pastebin.com/K8kwuzqt

Any help much appreciated.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

I misunderstood what you were trying to do before. I thought you wanted to list the terms associated with one particular post – the one you are on. Whoops!

Try this instead:

    $terms = get_terms('fruit_category');
    if(!empty($terms)){ 
        echo "<ul>";
        foreach ( $terms as $term ) {
            echo '<li><a href="'.get_term_link($term->slug, 'fruit_categories').'">'. $term->name . "</a></li>";
        }
        echo "</ul>";
    }

This will get you a list of all the links to the term pages, provided each term has at least one post in it.

Update:

To get taxonomy terms a bit more dynamically, can do this:

// taxonomy term archives
$post_type = get_post_type();
$taxonomies = get_object_taxonomies($post_type);
if(!empty($taxonomies)){
    foreach($taxonomies as $taxonomy){
        $terms = get_terms($taxonomy);
        if(!empty($terms)){ 
            echo "<ul>";
            foreach ( $terms as $term ) {
                echo '<li><a href="'.get_term_link($term->slug, $taxonomy).'">'. $term->name . "</a></li>";
            }
            echo "</ul>";
        }
    }
}


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x