今回はWordPress投稿のカテゴリー情報を取得するいくつかの方法について解説します。
本稿で解説すること
本稿では、WordPressを運営する中で頻繁に利用するカテゴリー情報の取得方法について解説します。
今回解説する取得例
- 全てのカテゴリーを取得する
- 記事のない空のカテゴリーを含めて取得する
- 指定したカテゴリーの子カテゴリーだけを取得する
- slug からカテゴリーを取得する
- 投稿が属するカテゴリーを取得する
カテゴリーに関する関数
まずは、WordPressで利用できるカテゴリーに関するWordPress関数を抑えておきましょう。 知っておくべき関数は次のものでしょう。 古いWordPressから現在も残っている関数もありますが、現在はカテゴリー情報をオブジェクトで返却してくれる関数を利用するのがスマートな方法でしょう。
関数名 | 概要 |
---|---|
get_categories($args) | 指定されたパラメータ($args)に一致するカテゴリーのオブジェクトを配列で返却します。 |
get_category_by_slug($slug) | 指定されたカテゴリーのスラッグからカテゴリーオブジェクトを返却します。 |
get_the_category($id) | 指令されたIDの投稿が属するカテゴリーを、カテゴリーオブジェクトの配列で返却します。 |
それぞれの関数で取得したカテゴリーオブジェクトは、次のような変数を持ちます。 種類がたくさんあるように見えますが、同じ情報が違う変数名で存在するだけで(例えば name
と cat_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階層目のカテゴリーだけを全て取得したい」というような例です。 このような複雑なカテゴリー取得方法については次稿で解説します。