get_the_term_list()
will not work here. The best function to use would be wp_get_post_terms()
With the following assumption, this can work
-
If a post only belongs to one parent, one child and/or one grandchild, you can order the terms by
term_id
. -
It is widely accepted that the parent will have a lower numbered ID than the child and the child will have a lower numbered ID than the grandchild
With this info, you can get the post terms as follow then inside your code
wp_get_post_terms( $post->ID, $taxonomy->name, array( 'orderby' => 'term_id' ) );
But as I said, you will need to have your post have only one parent, one child and one grandchild in the same tree
EDIT
You can try something like this. You will just need to add the HTML mark-up yourself
function btp_entry_capture_categories() {
$out="";
global $post;
$taxonomies = get_object_taxonomies( $post );
foreach ( $taxonomies as $taxonomy ) {
$taxonomy = get_taxonomy( $taxonomy );
if ( $taxonomy->query_var && $taxonomy->hierarchical ) {
$out .= '<div class="entry-categories">';
$out .= '<h6>' . $taxonomy->labels->name . '</h6>';
$terms = wp_get_post_terms( $post->ID, $taxonomy->name, array( 'orderby' => 'term_id' ) );
foreach ( $terms as $term ) {
$out .= $term->name;
}
$out .= '</div>';
}
}
return $out;
}