WordPress の WP_Term_Query を使ったターム一覧の表示方法

WordPress の WP_Term_Query を使ったターム一覧の表示方法

WordPress の WP_Term_Query を使ったターム一覧の表示方法を紹介します。
例えば、ターム一覧に紐づく投稿一覧を表示したいときに便利な方法です。

  1. WP_Term_Query を使ったターム一覧の表示方法
  2. タームの名前やスラッグの取得方法
  3. WP_Term_Query を使った親タームに紐づく子ターム一覧の表示方法

WP_Term_Query を使ったターム一覧の表示方法

WP_Term_Query は WordPress 4.6 から追加された新しいクラスになります。
使用するには WordPress 4.6 以上にアップデートしてから使用してください。
次のコードは、タクソノミースラッグが information-category の場合に、ターム一のアーカイブページのリンクとタームに紐づく投稿数のカウント付きで表示する方法です。

<?php
$args = array(
'taxonomy' => 'information-category', // タクソノミースタッグを指定
);
$the_query = new WP_Term_Query($args);
foreach($the_query->get_terms() as $term){ // 繰り返し処理の開始
$term_link = get_term_link($term->slug,$taxonomy_slug); // タームアーカイブのリンクを取得
echo '<a href="'.$term_link.'">'.$term->name.' <span class="count">'.$term->count.'</span></a>'; // 投稿カウント付きリンクを表示
}
?>

タームの表示順などを制御したい場合は、パラメーターを追加して対応します。

<?php
$args = array(
'taxonomy' => 'information-category', // タクソノミースタッグを指定
'orderby' => 'name', // カテゴリー名のアルファベット順
'order' => 'ASC', // ASC:昇順(初期値)、DESC:降順
'hide_empty' => false, // 投稿のないカテゴリーの扱い、true:空カテゴリーを隠す、false:全て表示
);
$the_query = new WP_Term_Query($args);
foreach($the_query->get_terms() as $term){ // 繰り返し処理の開始
$term_link = get_term_link($term->slug,$taxonomy_slug); // タームアーカイブのリンクを取得
?>
<a href="<?php echo $term_link; ?>"><?php echo $term->name.' ('.$term->count.')'; ?></a>
<?php
} // 繰り返し処理の終了
?>

WP_Term_Query は WordPress のプラグイン Intuitive Custom Post Order を使った並び替えが反映されないため、プラグインを使った並び替えを反映させたい場合は get_terms() を使用しましょう。
get_terms()を使ったタームの表示方法は WordPress ターム情報の取得と表示方法 をご覧ください。

タームの名前やスラッグの取得方法

タームオブジェクトには様々なフィールドが含まれます。
タームの名前や説明を返す場合は次のコードを参照してください。

<?php
$args = array(
'taxonomy' => 'category', // タクソノミーの指定
'orderby' => 'name', // カテゴリー名のアルファベット順
'order' => 'ASC', // ASC:昇順(初期値)、DESC:降順
'hide_empty' => false, // 投稿のないカテゴリーの扱い、true:空カテゴリーを隠す、false:全て表示
);
$the_query = new WP_Term_Query($args);
foreach($the_query->get_terms() as $term){ // 繰り返し処理の開始
echo $term->term_id; // タームID
echo $term->name; // ターム名前
echo $term->slug; // タームスラッグ
echo $term->term_group; // 親タームのターム ID
echo $term->term_taxonomy_id; // タームが属するタクソノミーのID
echo $term->taxonomy; // タームが属するタクソノミーの名前
echo $term->description; // タームディスクリプション
echo $term->parent; // 親タームのタームID
echo $term->count; // タームが使われている回数
echo $term->filter;
echo $term->term_order;
} // 繰り返し処理の終了
?>

WP_Term_Query を使った親タームに紐づく子ターム一覧の表示方法

WP_Term_Query を使った親タームに紐づく子ターム一覧の表示方法を紹介します。
例えば、タクソノミースラッグが information-category で、親タームのIDが 123 の場合、親タームに紐づく子ターム一覧を表示するには次のコードをテンプレートに追加します。

<?php
$taxonomy_slug = 'information-category'; // タクソノミーのスラッグを入力
$args = array(
'taxonomy' => $taxonomy_slug, // タクソノミースタッグを指定
'orderby' => 'name', // カテゴリー名のアルファベット順
'order' => 'ASC', // ASC:昇順(初期値)、DESC:降順
'hide_empty' => false, // 投稿のないカテゴリーの有無 true:空カテゴリーを隠す false:全て表示
'child_of' => '123' // 指定した親タームIDの子タームを表示
);
$the_query = new WP_Term_Query($args);
foreach($the_query->get_terms() as $term){ // 繰り返し処理の開始
$term_link = get_term_link($term->slug,$taxonomy_slug); // タームアーカイブのリンクを取得
echo '<a href="'.$term_link.'">'.$term->name.' <span class="count">'.$term->count.'</span></a>'; // 投稿カウント付きリンクを表示
}
?>

まとめ

WordPress の WP_Term_Query を使ったターム一覧の表示方法を紹介しました。
その他のタームの表示方法は WordPress ターム情報の取得と表示方法 をご覧ください。