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