How can I get only parent terms?

Is there any way to get only parent terms from custom taxonomy or category?

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

Yes, just pass in the parent parameter to get_terms when you call it, as Michael pointed out.

Since WP 4.5 this is the recommend usage:

$myterms = get_terms( array( 'taxonomy' => 'taxonomy_name', 'parent' => 0 ) );

Prior to WP 4.5 this was the default usage:

$myterms = get_terms( 'taxonomy_name_here', array( 'parent' => 0 ) );

Will return all terms that have a parent value of 0, ie. top level terms.

Method 2

use the ‘parent’ parameter:

http://codex.wordpress.org/Function_Reference/get_terms

or

http://codex.wordpress.org/Function_Reference/get_categories

Method 3

for woocommerce email templates use the following:

$terms = get_the_terms( $_product->id , 'product_cat');
    if($terms) {
        foreach( $terms as $term ) {
            $term = get_term_by("id", $term->parent, "product_cat");
            if ($term->parent > 0) {
                $term = get_term_by("id", $term->parent, "product_cat");
            }
            $cat_obj = get_term($term->term_id, 'product_cat');
            $cat_name = $cat_obj->name;
        }
    }
echo '<br />('. $cat_name . ')';

Method 4

 $archive_cats= get_terms( 'archivecat', 'orderby=count&hide_empty=0&parent=0' );

Method 5

For this demonstration, we will assume that we have a taxonomy called “Books”.
And we might have a hierarchy of:

Fiction (id: 699)
 - This is a Fiction Story.
Non-Fiction
 - Title of Non-fiction
Fantasy
  -  ...

We want to get the parent term of the taxonomy “Books” of the current post.

/* Get the Parent Taxonomy Term Name by post Id */

function get_parent_term_by_post_id($taxname, $taxid=null){

if(isset($taxid)):

    //Get by term Id passed in function
    $parent_tax = get_term_by('id', $taxid, $taxname);

    return $parent_tax ->name; //use name, slug, or id

else:

     //Get by PostId of current page
     $terms = wp_get_post_terms( get_the_id(), $taxname);

     $tax_parent_id = $terms[0]->parent;

     if($tax_parent_id == 0):
      $tax_parent_id = $terms[0]->parent; //get the next parent ID
     endif; 

     $parent_tax = get_term_by('id', $tax_parent_id , $taxname);

     return $parent_tax ->name; //use name, slug, or id

endif;

}

Then you just run on you template like this:

//enter custom tax name. will grab by post id 
echo get_parent_term_name_by_post_id('books'); //returns Fiction

or

//by term ID 
echo get_parent_term_name_by_post_id('books', 699); //returns Fiction


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