WordPressカテゴリーページで祖先カテゴリーのIDを取得する

WordPressの関数で祖先オブジェクトの配列を取得するには get_ancestors がありますが、なぜか正しく動作してくれないようです。祖先カテゴリーのIDを取得する関数が使えないので調べてみたところ、このような記事を見つけました。このページの先祖カテゴリを取得するを参考にしました。

まず、functions.php以下のコードを追加します。

function get_term_ancestor_by_term ( $sbjcat = '', $tax_name = 'category' ) { //カテゴリページ
    if ( empty( $sbjcat ) && is_category() ) {
        $sbjcat = get_query_var( 'cat' );
    } elseif ( empty( $sbjcat ) && is_tax() ) {
        $sbjcat = get_query_var( 'term_id' );
        $tax_name = get_query_var('taxonomy');
    } elseif ( !is_numeric( $sbjcat ) ) {
        $sbjcat = get_term_by( 'slug', $sbjcat, $tax_name )->term_id;
    }
    if ( !$sbjcat ) return false;
    $ancestors = array_reverse( get_ancestors( $sbjcat , $tax_name ) ); 
    if( isset( $ancestors[0] ) ) $ancestor_id = $ancestors[0]; else $ancestor_id = $sbjcat;
    return get_term( $ancestor_id , $tax_name );
}

function get_term_ancestor ( $post_id = '', $extree = '', $tax_name = 'category' ) { //投稿ページ
    if ( empty ( $post_id ) ) $post_id = get_post()->ID;
    if ( $extree && !is_numeric( $extree ) ) $extree = get_term_by( 'slug', $extree, $tax_name )->term_id; 
    $terms = get_the_terms( $post_id, $tax_name );
    if ($terms) : foreach ( $terms as $current_term ) : 
        if ( $current_term->term_id !== $extree && !isset( $tia ) ) {
            $req_id = $current_term->term_id;
            break;
        }
    endforeach; endif;
    if ( $req_id ) return get_term_ancestor_by_term( $req_id, $tax_name );
    else return false;
}

次にカテゴリーページのテーマに祖先カテゴリーのIDを取得するコードを追加します。$ancestorの変数に祖先カテゴリーのIDが取得されます。

$ancestor = get_term_ancestor_by_term ( get_query_var('cat') );

投稿ページのテーマで祖先カテゴリーのIDを取得するコードをは以下のとおりです。

$ancestor = get_term_ancestor( $post->ID );