WordPressで特定エントリの所属カテゴリを「親→子」の順に並び替える

例えばこういう、親子関係のあるカテゴリ構成があったとします

勇者
 ー時の勇者
 ー風の勇者
 ー神に選ばれし勇者

ある記事を「勇者 風の勇者」のカテゴリに指定した場合、普通にget_the_category()を使うと「勇者 風の勇者」ではなく機械的にアルファベット順に「風の勇者 勇者」と並べられてしまってヴァーとなることがあります

試行錯誤で2パターンほど対処法を試したので両方メモしておきます

解法その1

参考にさせていただいた記事です。ありがとうございます!
カスタムタクソノミーに親子関係(階層)を持たせ、複数選択したタームの並び順を親>子の順番に表示する
※「children[]」という箇所が自分の環境では動作しなかったので、自分なりに書き換えましたが、ちょっと頭の悪い処理かもしれません。ごめん。

functions.php

//引数として与えた配列を親子順に
function getRootTaxonomies($terms=null){
	$rootterms = array();
	$roottermstemp = array();
	if(isset($terms))
	{
		foreach($terms as $k=>$v){
			if($v->parent === 0){
				$rootterms[] = $v;
			}
		}
		foreach($rootterms as $k=>$v)
		{
			$i = 0;
			foreach($terms as $sk=>$sv){
				$childname = 'child'.$i;
				if( $v->term_id === $sv->parent){
					$rootterms[$k]->$childname  = $sv;
					$i++;
				}
			}
		}
	}
	return $rootterms;
}

テンプレートの該当箇所

slug; ?>
//カテゴリを出力したい場合
name; ?>
$childname && $pv->$childname->name != ''){
?>
//スラッグを出力したい場合
$childname->slug; ?>
//カテゴリを出力したい場合
$childname->name; ?>

解法その2

こっちの方法では、階層の同じカテゴリを複数指定した場合はうまくいかないです。

参考にさせていただいたのは下記の二つの記事です。ありがとうございます!
カテゴリIDを階層順に並べた配列をつくる Wordpressテーマの作り方
カテゴリIDからカテゴリ名/スラッグを取得する

function.php

//所属カテゴリ一覧を親子順に
function get_categories_tree() {
    $post_categories = get_the_category();
    $cat_trees = array();
    $cat_counts = array();
    $cat_depth_max = 10;
    foreach ( $post_categories as $post_category ) {
        $depth = 0;
        $cat_IDs = array($post_category->cat_ID);
        $cat_obj = $post_category;
        while ( $depth < $cat_depth_max ) {
            if ( $cat_obj->category_parent == 0 ) {
                break;
            }
            $cat_obj = get_category($cat_obj->category_parent);
            array_unshift($cat_IDs, $cat_obj->cat_ID);
            $depth++;
        }
        array_push($cat_trees, $cat_IDs);
        array_push($cat_counts, count($cat_IDs));
    }
    $depth_max = max($cat_counts);
    $cat_key = array_search($depth_max, $cat_counts);
    $cat_tree = $cat_trees[$cat_key];
    return $cat_tree;
}
//カテゴリIDからカテゴリ名とスラッグ取得
    function get_category_name_by_id($cat_ID,$type) {
        $cat_ID = (int) $cat_ID;
        $category = get_category($cat_ID);
        if($type == 'name'){
            return $category->cat_name;
        } elseif($type == 'slug') {
            return $category->slug;
        }
    }

テンプレートの該当箇所


//スラッグを出力したい場合

//カテゴリを出力したい場合