WordPressで最上位(第一階層)のカテゴリーのみをすべて取得する方法

投稿者 : OSCA

[PR] "出川哲朗の充電させてもらえませんか?"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

前回の投稿「WordPressでカテゴリーを取得する方法」では、WordPressでよくあるカテゴリー情報の取得方法について解説しました。 今回は、少し複雑なカテゴリー情報の取得要件として、最上位(第一階層)のカテゴリーのみを全て取得する方法について解説します。

本稿で解説すること

WordPress の投稿のカテゴリーは、親子関係を持たせることができます。 しかしWEBページにメニューを表示する場合などに最上位のカテゴリーのみを表示したい場合があります。 そのような場合、WordPress標準の関数だけでは実現できず、本校で解説するような実装をする必要があります。

実装方法

それでは具体的な実装方法について解説していきます。 前回の投稿でカテゴリー情報オブジェクトがどのような情報を持っているのかを解説しました。 カテゴリー情報オブジェクトには parent という変数があり、親カテゴリのID (整数)を保持しています。 しかし最上位のカテゴリーの場合は親カテゴリーが存在しないため値は「0」になります。 その特徴を利用して、以下のような処理で最上位カテゴリのみを取得することができます。

<?php
$categories = array();
foreach( get_categories() as $category ) {
    if( $category->parent == 0 ) {
        array_push($categories, $category);
    }
}
?>

これで、変数 $categories に最上位のカテゴリーのオブジェクトだけが配列で格納されます。 前回の投稿で述べたように関数 get_categories() には検索条件の引数を渡すこともできます。 必要であれば、この get_categories() を呼び出す際に絞り込みをすれば、特定の第一階層カテゴリのみを取得することも可能です。

この最上位カテゴリーを取得する処理が頻繁に必要であれば、 functions.php 内で関数化しておいても良いでしょう。

次回はn階層目カテゴリーのみを取得する方法を解説

本稿では最上位カテゴリーのみを取得する方法について解説しました。 次回は逆に子・孫カテゴリーで n 階層目のカテゴリーのみを取得する方法について解説します。

WordPressのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca