車の修理代20万円を払うべきか、100万円くらいの中古車に買い換えるべきか悩んでいる板川です。
久しぶりの投稿すぎて変に緊張しています。
目次
今回の目的
さて、今回はWordPressのget_terms関数です。get_termsでタームを取得する場合、デフォルトでは記事が存在するタームのみ表示されます。記事のアーカイブならそれでも良いのですが、タイトルのとおり、このターム一覧を表示させなければならない場合はそうもいきません。今回はその方法を記しておきます。
get_termsの概要
まずget_terms関数の簡単な説明です。get_terms関数は指定されたタクソノミー(カスタム分類)またはタクソノミーのリストについて、それに含まれるタームを取得します。返り値はタームのオブジェクトの配列で、 もしタクソノミーが存在しなければ WP_Error オブジェクトを返します。
get_termsの基本的な記法
<?php $terms = get_terms( $taxonomies, $args ); ?>
// $taxonomies、$argsはどちらも配列でもOK。
get_termsで記事がないタームも表示する場合
記事が無いタームを表示する場合は、get_termsの第2引数の配列でhide_emptyをfalseにします。
// 配列でオプションを設定します
<?php
$args = array(
'orderby' => 'id',
'order' => 'ASC',
'hide_empty' => false,
// 引数「hide_empty」をfalseにすることで投稿がない場合でも表示させることができます
);
// 取得するタクソノミーが「original_taxonomy」の場合
$terms = get_terms('original_taxonomy', $args);
var_dump($terms);
?>
その他のget_terms第2引数
$args = array(
'orderby' => 'name', // ソートするフィールド
'order' => 'ASC', // ソートの方向
'hide_empty' => true, // 空のタームを返すかどうか
'exclude' => array(), // 除外するタームの ID の配列。
'exclude_tree' => array(), // 除外する親タームの ID の配列
'include' => array(), // 含めるタームの ID の配列。空文字列を指定するとすべてのタームを対象にします。
'number' => '', // 返すタームの最大個数。デフォルトではすべてのタームを返します。
'fields' => 'all', // 返り値がどのような形式かを指定します
'slug' => '', // 指定した値がスラッグに一致するタームを返す。デフォルトは空文字列。
'parent' => '', // 直近の子タームを返す(指定された値が親タームの ID であるタームのみ)。
'hierarchical' => true, // 子タームを持つタームを含める
'child_of' => 0, // 指定したタームの子孫をすべて取得します。
'childless' => false, // タクソノミーが階層有りの場合、子を持たないタームのみを返します。階層無しの場合、すべてのタームを対象とします。
'get' => '', // デフォルトは空文字列です。この値を 'all' にすると 'hide_empty' と 'child_of' が無効になります(すべてのタームを取得します)。
'name__like' => '', // ターム名にマッチさせたい文字列。ターム名に対してのみ、データベースクエリの LIKE '%string%' を実行します。
'description__like' => '', // タームの説明に 'description__like' の文字列を含む(大文字小文字を区別して)タームを返します。
'pad_counts' => false, // true のとき、子孫タームすべてのカウント(投稿などのオブジェクトに付けられている回数)を合計します。
'offset' => '', // 見つかったタームの先頭から指定の個数を読み飛ばして返します。必ず 'number' と一緒に使ってください。そうしないと 'offset' は無視されて結果すべてが返されます。
'search' => '', // ターム名にマッチさせたい文字列。ターム名とスラッグに対して、データベースクエリの LIKE '%search_string%' を実行します。
'cache_domain' => 'core' // get_terms() が作成したクエリにユニークなキャッシュ用キーを付与できます。例えば、この関数のフィルターを使ってクエリを変更するとき(例えば 'terms_clauses')、'cache_domain' にユニークな値を指定しておけば、キャッシュにある同様のクエリを上書きせず残しておけます。デフォルト値は 'core' です。
);
まとめ
カスタム投稿タイプを設定するときに、必ずと言っていいほどタクソノミーを設定します。get_termsは使用頻度が高いため、引数の配列名を覚えるまではしなくとも、どういったことが出来るかは把握しておくとより良いコードを書けるのではないでしょうか。