サイト制作に関するメモ書き

HOME > CMS > WordPressのget_categories()を使ってみる

WordPressのget_categories()を使ってみる

WordPressのget_categories()を使って、色々な形でカテゴリーを取得してみます。

パラメータを設定しない場合

まずはget_categories()にパラメータを設定せずに試してみます。
今回は以下のようなカテゴリーを用意しました。

  • カテゴリーA(ID:1, slug:cata) 投稿数: 2件
    • カテゴリーA-1(ID:5, slug:cata-1) 投稿数: 1件
  • カテゴリーB(ID:3, slug:catb) 投稿数: 1件
    • カテゴリーB-1(ID:7, slug:catb-1) 投稿数: 0
  • カテゴリーC(ID:4, slug:catc) 投稿数: 0件
  • カテゴリーD(ID:6, slug:catd) 投稿数: 0件
    • カテゴリーD-1(ID:8, slug:catd-1): 投稿数1件

よく使いそうな以下の5つを出力してみます。

PHP

<ul>
<?php $categories = get_categories(); ?>
<?php foreach($categories as $category) : ?>
	<li>
	カテゴリー名: <?php echo $category->name; ?>
	スラッグ: <?php echo $category->slug; ?>
	ID: <?php echo $category->term_id; ?>
	投稿数: <?php echo $category->count; ?>
	親カテゴリーID: <?php echo $category->parent; ?>
	</li>
<?php endforeach; ?>
</ul>

実際に確認してみると、以下のように出力されました。
(見やすいように改行位置など調整しています。)

HTML

<ul>
	<li>
	カテゴリー名: カテゴリーA
	スラッグ: cata
	ID: 1
	投稿数: 2
	親カテゴリーID: 0
	</li>
	<li>
	カテゴリー名: カテゴリーA-1
	スラッグ: cata-1
	ID: 5
	投稿数: 1
	親カテゴリーID: 1
	</li>
	<li>
	カテゴリー名: カテゴリーB
	スラッグ: catb
	ID: 3
	投稿数: 1
	親カテゴリーID: 0
	</li>
	<li>
	カテゴリー名: カテゴリーD
	スラッグ: catd
	ID: 6
	投稿数: 0
	親カテゴリーID: 0
	</li>
	<li>
	カテゴリー名: カテゴリーD-1
	スラッグ: catd-1
	ID: 8
	投稿数: 1
	親カテゴリーID: 6
	</li>
</ul>

 

設定できるパラメータ

get_categories()に設定できるパラメータを見てみます。

type 取得するカテゴリーの種別を指定。
初期値はpost。
child_of 指定したカテゴリーIDの子孫カテゴリーを取得。
初期値は0。
parent 指定したカテゴリーIDの直接の子カテゴリーのみを取得。
初期値は”。
orderby 指定した項目のアルファベット順またはカテゴリーID順でカテゴリーを並べ替える。
設定できる値はid,name,slug,count,term_groupで、初期値はname。
order 並べ替えの昇順・降順を指定。
設定できる値はasc,descで、初期値はASC。
hide_empty 記事のないカテゴリーを排除するかどうかを指定。
設定できる値は1(隠す),0(含める)で、初期値は1。
child_ofが指定されている場合は自動的falseになる。
hierarchical 1の場合、
記事のない空のカテゴリーで、その子カテゴリーが空カテゴリーでない場合に、その親カテゴリーを含めるかどうか。
設定できる値は1(含める),0(含めない)で、初期値は1。
exclude 一つまたは複数のカテゴリーを除外する。
初期値は”。
include 指定したカテゴリーのみを含めるようにする。
初期値は”。
number 取得するカテゴリー数の上限を指定。
初期値は”。
taxonomy カテゴリーの代わりに指定したタクソノミーから取得。(3.0~)
登録しているタクソノミーを指定する形で、初期値はcategory。
pad_counts 子カテゴリーを含めて、リンクまたは投稿の数を計算するかどうか。
設定できる値は1(計算する),0(計算しない)で、初期値は0。

パラメータを使用する場合、配列形式もしくはクエリ文字列形式で引数に指定します。
例えば、配列形式でchild_ofを使ってみます。

PHP

<ul>
<?php $arr = array(
	'child_of' => 1,
);
$categories = get_categories($arr); ?>
<?php foreach($categories as $category) : ?>
	<li><?php echo $category->name; ?></li>
<?php endforeach; ?>
</ul>

カテゴリーIDが1なのはカテゴリーAで、その子孫カテゴリーを取得するので、カテゴリーA-1のみ取得できました。

HTML

<ul>
	<li>カテゴリーA-1</li>
</ul>

上記サンプルをクエリ文字列形式で指定する場合、以下のようになります。

PHP

<ul>
<?php $categories = get_categories('child_of=1'); ?>
<?php foreach($categories as $category) : ?>
	<li><?php echo $category->name; ?></li>
<?php endforeach; ?>
</ul>

 

投稿のないカテゴリーも取得する

デフォルトだと投稿のないカテゴリーは除外されますが、投稿のないカテゴリーも合わせて取得したい場合、hide_empty:0を指定します。

PHP

<ul>
<?php $arr = array(
	'hide_empty' => 0,
);
$categories = get_categories($arr); ?>
<?php foreach($categories as $category) : ?>
	<li><?php echo $category->name; ?></li>
<?php endforeach; ?>
</ul>

全カテゴリーを取得することができました。

HTML

<ul>
	<li>カテゴリーA</li>
	<li>カテゴリーA-1</li>
	<li>カテゴリーB</li>
	<li>カテゴリーB-1</li>
	<li>カテゴリーC</li>
	<li>カテゴリーD</li>
	<li>カテゴリーD-1</li>
</ul>

 

並び順を変更する

並び順を変更したい場合、orderbyやorderを使用します。
orderbyで並び順の基準になる項目を変更できます。

PHP

<ul>
<?php $arr = array(
	'hide_empty' => 0,
	'orderby'    => 'id',
);
$categories = get_categories($arr); ?>
<?php foreach($categories as $category) : ?>
	<li><?php echo $category->name; ?></li>
<?php endforeach; ?>
</ul>

並び順をid順に変更できました。

HTML

<ul>
	<li>カテゴリーA</li>
	<li>カテゴリーB</li>
	<li>カテゴリーC</li>
	<li>カテゴリーA-1</li>
	<li>カテゴリーD</li>
	<li>カテゴリーB-1</li>
	<li>カテゴリーD-1</li>
</ul>

orderで昇順・降順の変更ができます。

PHP

<ul>
<?php $arr = array(
	'hide_empty' => 0,
	'orderby'    => 'id',
	'order'      => 'desc',
);
$categories = get_categories($arr); ?>
<?php foreach($categories as $category) : ?>
	<li><?php echo $category->name; ?></li>
<?php endforeach; ?>
</ul>

降順に変更できました。

HTML

<ul>
	<li>カテゴリーD-1</li>
	<li>カテゴリーB-1</li>
	<li>カテゴリーD</li>
	<li>カテゴリーA-1</li>
	<li>カテゴリーC</li>
	<li>カテゴリーB</li>
	<li>カテゴリーA</li>
</ul>

 

最上位のカテゴリーのみを取得する

parentを0に指定することで、最上位のカテゴリーのみを取得することができます。

PHP

<ul>
<?php $arr = array(
	'parent' => 0,
);
$categories = get_categories($arr); ?>
<?php foreach($categories as $category) : ?>
	<li><?php echo $category->name; ?></li>
<?php endforeach; ?>
</ul>

最上位で投稿のあるカテゴリーのみを取得できました。

HTML

<ul>
	<li>カテゴリーA</li>
	<li>カテゴリーB</li>
	<li>カテゴリーD</li>
</ul>

 

カテゴリーを指定して取得する

指定したカテゴリーのみ取得、指定したカテゴリーのみ除外することもできます。
指定したカテゴリーのみ取得したい場合、includeにカンマ区切りでカテゴリーIDを指定します。

PHP

<ul>
<?php $arr = array(
	'include' => '1,6',
);
$categories = get_categories($arr); ?>
<?php foreach($categories as $category) : ?>
	<li><?php echo $category->name; ?></li>
<?php endforeach; ?>
</ul>

カテゴリーIDが1のカテゴリーAとカテゴリーIDが6のカテゴリーDのみ取得できました。

HTML

<ul>
	<li>カテゴリーA</li>
	<li>カテゴリーD</li>
</ul>

指定したカテゴリーを除外したい場合、excludeを使用します。

PHP

<ul>
<?php $arr = array(
	'hide_empty' => 0,
	'exclude'    => '1,6',
);
$categories = get_categories($arr); ?>
<?php foreach($categories as $category) : ?>
	<li><?php echo $category->name; ?></li>
<?php endforeach; ?>
</ul>

hide_empty:0 で全記事取得して、excludeでカテゴリーAとカテゴリーDを除外しました。

HTML

<ul>
	<li>カテゴリーA-1</li>
	<li>カテゴリーB</li>
	<li>カテゴリーB-1</li>
	<li>カテゴリーC</li>
	<li>カテゴリーD-1</li>
</ul>

 

カスタムタクソノミーを取得する

ニュース(news)というカスタム投稿を作成して、ニュースに紐づくカスタムタクソノミー(news_cat)を取得してみます。
カスタムタクソノミーの中は以下のようになっています。

  • ニュースカテゴリーA(ID:9, slug:news-cata) 投稿数: 1件
    • ニュースカテゴリーA-1(ID:12, slug:news-cata-1) 投稿数: 1件
  • ニュースカテゴリーB(ID:10, slug:news-catb) 投稿数: 1件
  • ニュースカテゴリーC(ID:11, slug:news-catc) 投稿数: 1件

カスタムタクソノミーを取得する場合、taxonomyを使います。

PHP

<ul>
<?php $arr = array(
	'taxonomy' => 'news_cat',
);
$categories = get_categories($arr); ?>
<?php foreach($categories as $category) : ?>
	<li><?php echo $category->name; ?></li>
<?php endforeach; ?>
</ul>

HTML

<ul>
	<li>ニュースカテゴリーA</li>
	<li>ニュースカテゴリーA-1</li>
	<li>ニュースカテゴリーB</li>
	<li>ニュースカテゴリーC</li>
</ul>

 

【参考サイト】

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

▲PAGE TOP