[WordPress] どの階層にいても最上位(一番上)のカテゴリー名を表示する

 2016.04.28  2017.10.30

最上位カテゴリーを取得

以前、get_categoryとget_the_categoryの違いについてという記事を書きました。 これらの関数を使って、実際にカテゴリー名を表示させてみようと思います。

現在のカテゴリーをただ表示させるだけというのは左程難しくないと思うので、今回は

2階層以上あるカテゴリーで、どのページにいても現在表示されているカテゴリーおよび所属しているカテゴリーの最上位カテゴリー名

を表示させます。PHP勉強中の私でも、果たしてきちんと「理解」をしてコードを書けるのでしょうか…?

最上位カテゴリにこだわる!

最上位カテゴリーというのは、下記の例でいうと「食品・衣料品・日用品」にあたります。もう上にカテゴリーがない一番上のカテゴリーです。

  • 食品
    • 果物
      • りんご
      • みかん
    • 野菜
      • りんご
      • みかん
    • お肉
  • 衣料品
    • トップス
      • カットソー
      • セーター
    • ボトムス
      • スカート
      • キュロット
  • 日用品
    • 文房具…

カテゴリーアーカイブで表示する場合(category.php)

使用関数
get_ancestors(), get_category(), get_queried_object(), array_pop(), array_reverse()

カテゴリーアーカイブのページで(category.php)、

カテゴリーページにて、最上位のカテゴリーが表示されていたらそのカテゴリー名を表示、親カテゴリーがあればそのカテゴリーの最上位カテゴリー名

を表示してみます。

現在表示されているページのカテゴリー情報はget_categoryかget_queried_objectで取得できます。中身はvar_dump()様やprint_r()様に確認してもらいましょう。

親カテゴリーの有無($catParent)の分岐は下記のような書き方もできます。親カテゴリーがない場合(=最上位カテゴリー)は「0」が帰ってくるので「0だったら、『0ではない』ではなかったら」、親カテゴリーがある場合(=子カテゴリー)は0以外の親カテゴリーIDが帰ってくるので「0以外、0より上だったら」というように分岐ができます。

array_popは、配列の一番最後の値を取り出すPHP関数です。get_ancestorsは孫→子→親(一番上)と逆の順番で帰ってくるので、その順番を利用して値を取得します。

例えば、get_ancestors( $thisCat, ‘category’ )で返される値が下記だとすると、

60が最上位カテゴリーのIDかつ配列の一番最後の値なので、array_popで最後の60を取得するという感じです。配列の要素が1つ減っちゃうのですが、最後の値を取るだけなら問題ないのかな…?

get_ancestorsは通常のカテゴリー構造とは逆の順番で帰ってくるのですが、array_reverse()というPHPの関数を使うと、配列の順番を逆さにすることが可能になり、親→子→孫という順番で値が帰ってきます。

上記のように書くと、

という順番で帰ってきます。パンくずリストなど作る時には使えそうです。因みにarray_reverseを使って最上位のカテゴリーを取得すると、下記のような感じになります。(やや強引)

スラッグを表示させる場合は、else以降でまず最上位のカテゴリIDの情報を取得してからスラッグを取得します。

これで、どのレベルのカテゴリーページにいても最上位のカテゴリー名が表示されます。されているはず…!

使用関数について

指定された子オブジェクトの祖先オブジェクトの配列を返します。

$object_id
(必須)子オブジェクトのID
$object_type
(必須)祖先オブジェクトの種類:’page’’category’など。
その他階層を持った投稿タイプ、階層を持ったタクソノミーが指定可能。

問い合わせパラメータにマッチするカテゴリーのオブジェクトを配列として返します。

get_categoriesのパラメーターの初期値

戻り値

現在クエリされているオブジェクトを取得する。カテゴリーアーカイブを表示中なら、カテゴリーオブジェクト。

投稿記事で表示させる場合(single.php)

投稿記事は複数のカテゴリーに登録している場合がありますので、一番初めのカテゴリーをひとつ取り出して、そのカテゴリーの親カテゴリーを調べます。

親カテゴリー有無の分岐はカテゴリーページと同じです。投稿記事の場合は、get_the_categoryを使って、登録しているカテゴリー情報を取得します。

使用関数について

$id
投稿ID
初期値は$post->ID (現在の投稿の ID)
内容
この記事が所属する全カテゴリーの情報取得。複数あれば配列で返ってくる。

最上位のカテゴリーのみのカテゴリーリストを作成する

カテゴリーのリストを表示するタグを使って、最上位のみのカテゴリーリストを作ってみます。上記の例でいうと、

  • 食料
  • 衣料品
  • 日用品

のみをリスト表示します。

wp_list_categoriesを使う

こちらのタグはリンク付きでフォーマットされたカテゴリーリストを表示します。フォーマットされていない生のデータが必要な時は、後述のget_categories()を使用します。 「depth=1」と指定すると、最上位カテゴリーのみ出力します。

$argsで指定できるパラメーター一覧

get_categoriesを使う

パラメーターを指定して、カテゴリーのオブジェクトを配列として返します。パラメータの内容はwp_list_categoriesとほぼ同じで、クエリ文字列形式でも配列形式でも渡すことが可能。こちらの方が色々と応用がききますね。

$argsで指定できるパラメーター一覧

戻り値