There are probably some better ways to do this but you can always do a three simple foreach
loops.
I wrote an example function that does the job well and should serve you as a good starting point:
function print_taxonomic_ranks( $terms="" ){
// check input
if ( empty( $terms ) || is_wp_error( $terms ) || ! is_array( $terms ) )
return;
// set id variables to 0 for easy check
$order_id = $family_id = $subfamily_id = 0;
// get order
foreach ( $terms as $term ) {
if ( $order_id || $term->parent )
continue;
$order_id = $term->term_id;
$order = $term->name;
}
// get family
foreach ( $terms as $term ) {
if ( $family_id || $order_id != $term->parent )
continue;
$family_id = $term->term_id;
$family = $term->name;
}
// get subfamily
foreach ( $terms as $term ) {
if ( $subfamily_id || $family_id != $term->parent )
continue;
$subfamily_id = $term->term_id;
$subfamily = $term->name;
}
// output
echo "Order: $order, Family: $family, Sub-family: $subfamily";
}
Let it live in your functions.php
file and use it in your templates like this:
print_taxonomy_ranks( get_the_terms( $post->ID, 'taxonomic_rank' ) );
NOTE: Looping the same array three times around sounds a bit stupid but on the other hand it’s a quick and easy solution which is easy to read, extend and maintain.