WordPressでカテゴリー情報を取得するいくつかの方法 (全て・子のみ・逆引きなど)

投稿者 : OSCA

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

今回はWordPress投稿のカテゴリー情報を取得するいくつかの方法について解説します。

本稿で解説すること

本稿では、WordPressを運営する中で頻繁に利用するカテゴリー情報の取得方法について解説します。

今回解説する取得例

  1. 全てのカテゴリーを取得する
  2. 記事のない空のカテゴリーを含めて取得する
  3. 指定したカテゴリーの子カテゴリーだけを取得する
  4. slug からカテゴリーを取得する
  5. 投稿が属するカテゴリーを取得する

カテゴリーに関する関数

まずは、WordPressで利用できるカテゴリーに関するWordPress関数を抑えておきましょう。 知っておくべき関数は次のものでしょう。 古いWordPressから現在も残っている関数もありますが、現在はカテゴリー情報をオブジェクトで返却してくれる関数を利用するのがスマートな方法でしょう。

関数名概要
get_categories($args)指定されたパラメータ($args)に一致するカテゴリーのオブジェクトを配列で返却します。
get_category_by_slug($slug)指定されたカテゴリーのスラッグからカテゴリーオブジェクトを返却します。
get_the_category($id)指令されたIDの投稿が属するカテゴリーを、カテゴリーオブジェクトの配列で返却します。

それぞれの関数で取得したカテゴリーオブジェクトは、次のような変数を持ちます。 種類がたくさんあるように見えますが、同じ情報が違う変数名で存在するだけで(例えば namecat_name はいずれも「カテゴリー名」を持つ)、実際にはあまり多くの情報を持ちません。

変数名概要
cat_ID整数カテゴリーID
cat_name文字列カテゴリー名
category_count整数カテゴリーに登録されている投稿の数
category_description文字列カテゴリーの説明
category_nicename文字列カテゴリーのスラッグ名
category_parent整数親カテゴリーのID
count整数カテゴリーに登録されている投稿の数
description文字列カテゴリーの説明
term_id整数カテゴリーID
name文字列カテゴリー名
object_id整数オブジェクトID
parent整数親カテゴリーのID
slug文字列カテゴリーのスラッグ
taxonomy文字列タクソノミー名「category」
term_group整数カテゴリーのグループ
term_taxonomy_id整数カテゴリーのタクソノミーID

それでは、それぞれ使用例を示しながら解説していきます。

使用例1 : 全てのカテゴリーを取得する

ブログに存在する全てのカテゴリーを取得するには get_categories($args) 関数を利用するのが良いでしょう。 サイドバーなどにカテゴリー一覧を表示する場合などに利用できます。 サンプルコードは次の通りです。get_categories($args) 関数の引数 $args には取得条件を指定できますが、取得条件を指定しない場合は次のように引数を省略できます。

<ul>
<?php
$categories = get_categories();
foreach( $categories as $category ) { ?>
    <li><a href="<?=get_category_link($category->term_id) ?>"><?=$category->name ?></a></li>
<?php } ?>
</ul>

関数 get_category_link($id) は、指定されたIDのカテゴリーページのURLを返却する関数です。

使用例2 : カテゴリを絞り込んで取得する

上述のように、関数 get_categories($args) は引数 $args で取得条件を指定できます。 $args は連想配列であり、$arrgs で指定できる条件は以下の通りです。 (よく使うものを記載)

連想配列のキー概要
child_of整数指定されたカテゴリーIDの子孫カテゴリー(子,孫…)のみとします。
parent整数指定されたカテゴリーIDの直接の子カテゴリーのみとします。
orderby文字列カテゴリの並び順を「id」「name」「slug」「count」「term_group」のいずれかで指定します。 (デフォルトは「name」)
order文字列並び順を「asc」(昇順)、「desc」(降順)から指定します。 (デフォルトは「asc」)
hide_empty論理値記事のないカテゴリーを排除するかどうかを指定します。
1 : 記事のないカテゴリーを排除します。 デフォルトはこちら。
0 : 記事のないカテゴリーも含めます。

使用例2-1 : 記事のない空のカテゴリーを含めて取得する

例えば、記事のない空のカテゴリーを含めて取得したい場合は次の例のように hide_empty を指定します。

<ul>
<?php
$categories = get_categories(array('hide_empty'=>0));
foreach( $categories as $category ) { ?>
    <li><a href="<?=get_category_link($category->term_id) ?>"><?=$category->name ?></a></li>
<?php } ?>
</ul>

使用例2-2 : 指定したカテゴリーの子カテゴリーだけを取得する

指定したカテゴリーの子カテゴリーだけを取得する場合は parent を指定します。 次の例では親カテゴリーのIDを「1」としています。

<ul>
<?php
$categories = get_categories(array('parent'=>1));
foreach( $categories as $category ) { ?>
    <li><a href="<?=get_category_link($category->term_id) ?>"><?=$category->name ?></a></li>
<?php } ?>
</ul>

使用例3 : slug からカテゴリーを取得する

「URLパラメータに含まれる slug の値からカテゴリーを取得したい」というような場合があります。 slug が明確になっている場合は関数 get_category_by_slug($slug) を利用します。

<?php
$category = get_category_by_slug("wordpress");
?>

使用例4 : 投稿が属するカテゴリーを取得する

投稿が属するカテゴリーを取得したい場合もあります。 その場合は関数 get_the_category() を利用します。 既に投稿を取得したループの中で関数を呼ぶ場合には、次の例のように引数を指定する必要はありません。 WordPressでは投稿を複数のカテゴリに紐づけることができますので、カテゴリーオブジェクトが配列で返却されることに注意してください。

<?php
$categories = get_the_category();
?>

特定の投稿のIDを指定してカテゴリーを取得する場合は、投稿IDを引数に指定します。次の例では、投稿ID「1」が属するカテゴリーを取得しています。

<?php
$categories = get_the_category(1);
?>

もう少し複雑な条件でカテゴリー取得をするには?

本稿では基本的なカテゴリーの取得方法について解説しました。 しかしWordPressテーマを作り込んでいくと、もう少し複雑なカテゴリー取得をしたい場合が出てきます。 例えば「3階層目のカテゴリーだけを全て取得したい」というような例です。 このような複雑なカテゴリー取得方法については次稿で解説します。

WordPressのトップへ戻る

著者 : OSCA

OSCA

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