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_ID
のparent
の値を参照します。
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
となります。