I have a custom taxonomy (hierarchical) for which I’m outputting the results. For example’s purpose:
–Drinks
—-Tequila
——Reposado
——Blanco
—-Beer & Wine
——Beer
——Wine
——–Red
——–White
——–Rose
—-Whisky
——Lowlands
——Highlands
——Islay
I have a loop that goes through and outputs the hierarchy–the problem is that I have ONE term that goes a level deeper than the rest (the different types of wine: red, white, rose). Currently, my loop outputs headings for each term, so the loop puts Red, White, Rose at the same level as the rest of the terms. What I need it to do is realize when a term is 3-levels deep, and instead output an so that I can maintain the correct hierarchy.
All that to say: is there a way to determine a term’s depth? if $term_depth = 4, then do this. If $term_depth = 4, then do this?
My loop:
$theCatId = get_term_by( 'slug', $currentslug, 'drink_cats' );
$termID = $theCatId->term_id;
$taxonomyName = 'drink_cats';
$termchildren = get_term_children( $termID, $taxonomyName );
$termhier = _get_term_hierarchy($taxonomyName);
if (isset($termhier[$termID])) {
foreach ($termchildren as $child) {
$term = get_term_by( 'id', $child, $taxonomyName );
$termname = $term->name;
// loop here to get $term depth?
// level 3
echo '<h2>'. $termname . '</h2>';
// level 4 <h3>greatgrandchild</h3>
$args = array(
'post_type' => 'menu_drinks',
'orderby' => 'menu_order',
'order' => 'ASC',
'posts_per_page' => -1,
'taxonomy' => 'drink_cats',
'term' => $term->slug
);
$drink_query = get_posts( $args );
if ($drink_query) {
echo '<ul class="drink-group">';
foreach( $drink_query as $post ) {
setup_postdata($post);
$drinkdesc = get_field('drink_description');
$drinkprice = get_field('drink_price');
$drinkphoto = get_field('drink_photo');
//output specific drink, description, price
?>
<li>
<h4><?php the_title(); if ($drinkprice) { echo " - $" . $drinkprice; } ?></h4>
<?php if ($drinkdesc) { ?>
<p><?php echo $drinkdesc; ?></p>
<?php }?>
</li>
<?php }
echo '</ul>';
}
}
}
else {
$args = array(
'post_type' => 'menu_drinks',
'orderby' => 'menu_order',
'order' => 'ASC',
'posts_per_page' => -1,
'taxonomy' => 'drink_cats',
'term' => $currentpage
);
$drink_query = get_posts( $args );
echo '<ul class="drink-group">';
foreach( $drink_query as $post ) :
setup_postdata($post);
$drinkdesc = get_field('drink_description');
$drinkprice = get_field('drink_price');
$drinkphoto = get_field('drink_photo');
?>
<li>
<h4><?php the_title(); if ($drinkprice) { echo " - $" . $drinkprice; } ?></h4>
<?php if ($drinkdesc) { ?>
<p><?php echo $drinkdesc; ?></p>
<?php } ?>
</li>
<?php endforeach;
echo '</ul>';
}
Thanks for you time–if anyone is interested, I can send a link to the dev server so you can see how the Beer & Wine page outputs now, if this is unclear.
Use
get_ancestors()
and count the returned array: thatâs the number of ancestors a term has.For a practical use case you may take a look at my plugin T5 Parent Terms in body_class. Its name should tell you what it does. 🙂