WEB制作のための情報サイト / unazuki Library

get_terms()

基本構文と使い方(引数・実行結果)

基本構文

条件にマッチしたタームオブジェクトの配列を取得します。タームの一覧を表示したいときなどに使うことができます。

get_terms($args,$deprecated);

引数

引数必須/任意引数に指定するもの
第1引数
$args
任意取得するタームの条件(パラメーター)を配列で指定(文字列での指定も可能ですが配列で理解しておく方が柔軟性がありオススメです)。
初期値[](空の配列)

利用できる主なパラメーターは下記の通り。

taxonomy タクソノミー名を文字列か配列で指定
orderby 返す値の順番を何順にするか指定、nameやcountなど。省略時はname
order ASC/DESCを指定。ASCは昇順、DESCが降順。省略時はASC
hide_empty 真偽値を指定。trueなら記事件数が0のタームを除外。省略時はtrue
include 取得するタームのIDを配列で指定。省略時は空の配列(指定なし)
exclude 取得しないタームのIDを配列で指定。省略時は空の配列(指定なし)
exclude_tree 子タームを含めて取得しないタームのIDを配列で指定
number 取得件数の上限。省略時は全件
name 取得したいタームの名前あるいはその配列
slug 取得したいタームのスラッグあるいはその配列
meta_query メタクエリの指定(カスタムフィールドを条件に取得)

すべてのパラメーターは下記公式に記載があります。(英語)
https://developer.wordpress.org/reference/classes/wp_term_query/__construct/
第2引数
$deprecated
任意第1引数を文字列で指定した場合、第1引数はタクソノミーの指定として認識され、第2引数で他のパラメーターを配列で指定できる。
※第1引数を配列で指定することを前提に原則利用しない理解で問題ありません。
初期値''(空のテキスト)

プラグインでカスタマイズしている場合は、プラグインが優先される可能性があります。例えば、orderbyやorderの値が反映されない場合は、ターム並び替えのプラグインが効いている可能性を疑ってみてください。

実行結果

戻り値(返す値):条件にマッチしたタームオブジェクトの配列
取得したタームオブジェクトを配列として返します。foreachでループを回して配列から1つ1つ要素(タームのオブジェクト)を取り出してタームの名前を取得したりすることができます。
このオブジェクトが持つ主なプロパティ(中身)は以下の通りです。

タームオブジェクトの主なプロパティ

term_id タームのID
name タームの名前
slug タームのスラッグ
taxonomy 所属するタクソノミーの名前
description タームの説明文(管理画面からタームを追加する際の「説明」欄)
count タームに所属する記事数

例1.条件指定と必要情報の表示例

下記例では、まずタクソノミー「example-taxonomy」に所属するタームからID10と12のタームを除外し、さらにいくつか条件を加えた上でタームの一覧を取得しています。そして取得したターム一覧をforeachで回し、各タームオブジェクトからタームの名前を取得・表示してタームIDと名前の一覧表示を作成します。

<?php
$args = [
	'taxonomy' => 'example-category', // 複数の場合は配列指定可
	'exclude' => [10, 12], // ID10と12のタームを除外
	'orderby' => 'count', // 表示する際の順番をcount(記事数)を基準にする
	'order' => 'DESC', // 表示順を降順(この場合、記事件数が多い順)にする
	'hide_empty' => false, // 記事件数が0のタームも含める
];
$terms = get_terms($args);
foreach ($terms as $term) { // 配列から1つ1つ要素(タームオブジェクト)を取り出して処理
	echo $term->term_id; // タームのIDを取得して表示
	echo $term->name; // タームの名前を取得して表示
}
?>

学習者向け補足情報

【引数とは】
テンプレートタグ(=関数)を実行する際に、引数を渡すことができるテンプレートタグがあります。引数は、関数の中で使われるので、渡す引数の値によって実行結果が変わってきます。何を処理したいのか、どのようなデータを取得したいのかによって渡す引数が変わります。

【引数について】

  • 指定できる引数の数はテンプレートタグによって異なります。(引数なしもあり)
  • 引数ごとに必須 / 任意が決まっています。(必須は必ず指定、任意は指定しなければ初期値)
  • 引数名(例:$post)は仕様の便宜上の名前と考えてください。(この名前自体はテンプレートタグ実行に関係しません。各引数に何を指定するのかを理解していればOKです。)

【オブジェクトとは?】
オブジェクトとはデータの集合体です。例えば1つの記事には、記事の公開日、タイトル、本文など様々なデータがあります。それらを1つのデータにまとめたものがオブジェクトです。WordPressに関わらず、オブジェクトはプログラミングで一般的に使われるデータの集合体を示す言葉です。

【戻り値とは?】
テンプレートタグ(=関数)を実行した結果、返ってくる値のことを戻り値といいます。戻り値を変数に格納してその後の処理に使ったりします。また、テンプレートタグによって、真偽値、オブジェクト、整数など、戻り値の型は様々です。
※戻り値はechoしない限り画面には表示されません。あくまでもプログラミング上で値として返ってくるだけです。戻り値ではなく、値を画面に表示するテンプレートタグもあります。(例:the_title は画面に記事のタイトルを表示するテンプレートタグ)

よくある使い方

ニュースやブログページのサイドバーに任意のタクソノミーに所属するターム一覧を表示したい場合などで使われます。具体的なコードは下記「参考コード」を参考にしてください。

参考コード

下記例では、指定したタクソノミーに紐づくタームの一覧をリンク付きで表示します。
取得した配列(タームオブジェクトの配列)からループ処理でタームオブジェクトを取り出し、そのオブジェクトから必要情報を取得してHTMLに埋め込んでいます。
下記コードにあるget_term_link()はタームオブジェクトを引数にとり、タームのリンク(タームに紐づく記事の一覧を表示するためのリンク)を返します。

<?php
$args = [
	'taxonomy'   => 'example-category',
	'orderby'    => 'count',
	'order'      => 'DESC',
];
$terms = get_terms($args);

if (!empty($terms) && !is_wp_error($terms)) { // 空の配列あるいはエラーではないか
	echo '<ul>';
	foreach ($terms as $term) {
		echo '<li>';
		echo '<a href="' . get_term_link($term) . '">';
		echo $term->name;
		echo '</a> (' . $term->count . ')';
		echo '</li>';
	}
	echo '</ul>';
}
?>

結果例:下記のようにターム一覧を記事数付きで表示します(実際にはリンクが付きます)。
カテゴリーA(11)
カテゴリーB(5)
カテゴリーC(3)
カテゴリーD(1)

※当サイトでは初期値とデフォルト値の言葉の定義を区別せず、原則統一して初期値を採用しています。

関連するテンプレートタグ

テンプレートタグ 説明
single_term_title() ターム別の記事一覧ページ(taxonomy.phpやarchive.phpなど)にて、現在のカテゴリー名を表示します。
single_cat_title() カテゴリー別の記事一覧ページ(category.phpやarchive.phpなど)にて、現在のカテゴリー名を表示します。
get_the_terms() 投稿に紐づいているターム情報を取得します。
get_the_tags() 投稿に紐づいているタグ情報を取得します。
get_the_category() 投稿に紐づいているカテゴリー情報を取得します。
get_tags() 条件にマッチしたタグオブジェクトの配列を取得します。
get_categories() 条件にマッチしたカテゴリーオブジェクトの配列を取得します。
get_term_link() タームのURLを取得します。
get_tag_link() タグのURLを取得します。
get_category_link() カテゴリーのURLを取得します。