WordPressでは、記事のカテゴリー情報を取得する方法が色々あります。
今回は、普段よく使っている親カテゴリーや祖先カテゴリーを取得する方法をまとめてみました。
現在の記事が属するカテゴリーを取得する
まずは、基本的なカテゴリー情報の取得方法です。
<?php
$cats = get_the_category(); //現在のカテゴリーを取得
$cat = $cats[0]; //複数カテゴリーに属している場合は、最初のカテゴリー情報を取得
echo $cat->cat_ID; //カテゴリーIDを表示
echo $cat->cat_name; //カテゴリー名を表示
echo $cat->category_nicename; //スラッグを表示
?>
上記の方法では、記事が複数のカテゴリーに属している場合、カテゴリーIDが一番小さいカテゴリーしか取得できません。
全てのカテゴリーを表示する場合は、以下の方法で取得できます。
<?php
$cats = get_the_category();
foreach($cats as $cat){
echo $cat->cat_ID; //カテゴリーIDを表示
echo $cat->cat_name; //カテゴリー名を表示
echo $cat->category_nicename; //スラッグを表示
}
?>
記事の親カテゴリーを取得する
直接の親にあたるカテゴリーを取得する場合は、parentを使用して取得できます。
以下の例では、もし親カテゴリーがない場合は現在のカテゴリーを表示するようにしています。
<?php
$cats = get_the_category(); //現在のカテゴリーを取得
$cat = $cats[0];
if( $cat->parent ){ //親カテゴリの場合
$parent = get_category( $cat->parent );
echo $parent->cat_ID; //カテゴリーIDを表示
echo $parent->cat_name; //カテゴリー名を表示
echo $parent->slug; //スラッグを表示
} else {
echo $cat->cat_ID; //カテゴリーIDを表示
echo $cat->cat_name; //カテゴリー名を表示
echo $cat->slug; //スラッグを表示
}
?>
記事の祖先カテゴリーを取得する
次に、2階層以上あるカテゴリーに属している場合に直接の親カテゴリーでなく、最上位のカテゴリー(祖先カテゴリー)を表示したい場合があるかと思います。
カテゴリーアーカイブページで表示する場合
カテゴリーページにて、最上位のカテゴリーであればそのカテゴリー名を表示。祖先カテゴリ―がない場合は、親カテゴリーのカテゴリー名を表示する場合の例をあげてみます。
<?php
$cat = get_queried_object(); //カテゴリーオブジェクトを取得
$catParent = $cat->parent; //親カテゴリーのID(なければ0)
if( !$catParent ){ //現在のページが最上位のカテゴリーなら
echo $cat->cat_ID; //現在のカテゴリーIDを表示
echo $cat->cat_name; //現在のカテゴリー名を表示
echo $cat->slug; //現在のスラッグを表示
} else { //祖先カテゴリーを表示するなら
$ancestor = array_pop(get_ancestors( $cat->cat_ID, 'category' )); //配列の一番最後の値(一番上のカテゴリーID)を取得
echo $ancestor; //カテゴリーID表示
echo get_cat_name($ancestor); //カテゴリー名表示
echo get_category($ancestor) -> slug; //スラッグ表示
}
?>
投稿記事で表示する場合
投稿記事の場合は、複数のカテゴリーに属している場合があるので、初めの1つを取り出してから親カテゴリーを取得します。
<?php
$cats = get_the_category($post->ID); //現在の投稿記事のIDからカテゴリー情報を取得
$cat = $cats[0]; //複数カテゴリーに属している場合は、最初のカテゴリー情報を取得
$catParent = $cat->parent; //親カテゴリーのID(なければ0)
if( !$catParent ){ //現在のページが最上位のカテゴリーなら
echo $cat->cat_ID; //現在のカテゴリーIDを表示
echo $cat->cat_name; //現在のカテゴリー名を表示
echo $cat->slug; //現在のスラッグを表示
} else { //祖先カテゴリーを表示するなら
$ancestor = array_pop(get_ancestors( $cat->cat_ID, 'category' )); //配列の一番最後の値(一番上のカテゴリーID)を取得
echo $ancestor; //カテゴリーID表示
echo get_cat_name($ancestor); //カテゴリー名表示
echo get_category($ancestor) -> slug; //スラッグ表示
}
?>
今回ご紹介した方法以外にも親カテゴリーや祖先カテゴリーを取得する方法はあります。
また、カテゴリーをリスト化して表示する方法などもありますので、色々と検索してみてください。