get_the_category()タグから親のみ取得する

投稿ページ(single.php)などでget_the_category()を使って親カテゴリーのみ取得したい場合は下記のコードで取得することが可能です。親カテゴリーはparentの値が0なのでその条件で組めば親カテゴリーのみ取得することができます。

foreach(get_the_category() as $cat){
    if($cat->parent == 0){
        echo '<a href="' . get_category_link($cat->cat_ID) . '">' . $cat->name . '</a>';
    }
}

親カテゴリーの識別について

下記はサンプルで用意した投稿ページのget_the_category()の戻り値になります。親と子カテゴリーが存在するページになります。親カテゴリーか識別するにはparentに着目します。この値が0の場合そのカテゴリーは親カテゴリーを意味します。

もしparentに値が入っている場合それは子カテゴリー(または孫)を意味していて["parent"]=>int(159)の子カテゴリーという意味になります。子カテゴリーの親を調べるにはterm_id / term_taxonomy_id / cat_IDparentの値を参照します。

array(2) {
  [0]=>
  object(WP_Term)#4768 (16) {
    ["term_id"]=>
    int(177)
    ["name"]=>
    string(8) "explorer"
    ["slug"]=>
    string(8) "explorer"
    ["term_group"]=>
    int(0)
    ["term_taxonomy_id"]=>
    int(177)
    ["taxonomy"]=>
    string(8) "category"
    ["description"]=>
    string(0) ""
    ["parent"]=>
    int(159)
    ["count"]=>
    int(1)
    ["filter"]=>
    string(3) "raw"
    ["cat_ID"]=>
    int(177)
    ["category_count"]=>
    int(1)
    ["category_description"]=>
    string(0) ""
    ["cat_name"]=>
    string(8) "explorer"
    ["category_nicename"]=>
    string(8) "explorer"
    ["category_parent"]=>
    int(159)
  }
  [1]=>
  object(WP_Term)#4769 (16) {
    ["term_id"]=>
    int(159)
    ["name"]=>
    string(7) "Windows"
    ["slug"]=>
    string(7) "windows"
    ["term_group"]=>
    int(0)
    ["term_taxonomy_id"]=>
    int(159)
    ["taxonomy"]=>
    string(8) "category"
    ["description"]=>
    string(0) ""
    ["parent"]=>
    int(0)
    ["count"]=>
    int(1)
    ["filter"]=>
    string(3) "raw"
    ["cat_ID"]=>
    int(159)
    ["category_count"]=>
    int(1)
    ["category_description"]=>
    string(0) ""
    ["cat_name"]=>
    string(7) "Windows"
    ["category_nicename"]=>
    string(7) "windows"
    ["category_parent"]=>
    int(0)
  }
}

孫カテゴリーがある場合

もし親>子>孫といったカテゴリー構造だった場合、孫カテゴリーは配列の最初に追加されます。なので孫カテゴリー(0)、子カテゴリー(1)、親カテゴリー(2)となります。そして孫カテゴリーの親カテゴリーはparent =>177となります。