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

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

WordPress で get_terms を使ったターム一覧の表示方法を紹介します。
例えば、サイドバーにタームの一覧を表示したいときに便利な方法です。

  1. get_terms を使ったターム一覧の表示
  2. カレントクラスを追加したい場合
  3. タクソノミーを複数指定する方法
  4. タームに紐づく投稿の数でソートする

get_terms を使ったターム一覧の表示

get_terms を使ってタームの一覧を表示する場合は、パラメーターにタクソノミースラッグを指定します。
例えば、タクソノミースラッグが news-cat の場合に、リンク付きターム一覧を表示するには、次のコードをテンプレートファイルに追加します。

<?php // get_terms を使ったターム一覧の表示
$taxonomy_terms = get_terms('news-cat'); // タクソノミースラッグを指定
if(!empty($taxonomy_terms)&&!is_wp_error($taxonomy_terms)){
echo '<ul>';
foreach($taxonomy_terms as $taxonomy_term): // foreach ループの開始
?>
<li><a href="<?php echo get_term_link($taxonomy_term); ?>"><?php echo $taxonomy_term->name; ?></a></li>
<?php
endforeach; // foreach ループの終了
echo '</ul>';
}
?>

タームの登録がない場合は表示されません。

タームアーカイブのリンクや名前以外を取得したい場合は、次のコードを foreach のループ内に追加します。

<?php // ターム情報の表示
echo $term_id = $term->term_id; // タームIDを表示
echo $term_name = $term->name; // ターム名を表示
echo $term_slug = $term->slug; // タームスラッグを表示
echo $term_description = $term->description; // タームディスクリプションを表示
echo $term_link = get_term_link($term_slug,$taxonomy_slug); // タームリンクを表示
?>

カレントクラスを追加したい場合

taxonomy.php などのタクソノミーアーカイブページで、表示中のアーカイブに該当するタームにカレントクラスを付与したいときは、アーカイブのタームとターム一覧のタームを照合してカレントクラスを付与します。
例えば、タクソノミースラッグが news-cat の場合に、リンク付きターム一覧にカレントを付与するには、次のコードを taxonomy.php ファイルに追加します。

<?php // get_terms を使ったターム一覧の表示
$taxonomy_terms = get_terms('news-cat'); // タクソノミースラッグを指定
if(!empty($taxonomy_terms)&&!is_wp_error($taxonomy_terms)){
echo '<ul>';
foreach($taxonomy_terms as $taxonomy_term): // foreach ループの開始
?>
<li><a href="<?php echo get_term_link($taxonomy_term); ?>" class="<?php if($taxonomy_term->slug === $term){ echo 'current'; } ?>"><?php echo $taxonomy_term->name; ?></a></li>
<?php
endforeach; // foreach ループの終了
echo '</ul>';
}
?>

カレントの付与は a タグ内に記載しています。
taxonomy.php 内では $term でタームスラッグが取得できるので、その値と照合してカレントを付与しています。

<?php if($taxonomy_term->slug === $term){ echo 'current'; } ?>

タクソノミーを複数指定する方法

タクソノミーを複数指定したい場合は array を使います。
例えば、タクソノミースラッグ news-cat と news-tag の二つを混ぜたタームの一覧を表示したい場合は、次のコードをテンプレートファイルに追加します。

<?php // get_terms を使ったターム一覧の表示
$taxonomies = array( // タクソノミーを複数指定する場合は array を使用
'news-cat', // タクソノミースラッグの指定
'news-tag' // タクソノミースラッグの指定
);
$args = array(
'order' => 'DESC' // 順番を昇順か降順かを指定、デフォルトは DESC 降順
);
$taxonomy_terms = get_terms($taxonomies, $args); // 値をセット
if(!empty($taxonomy_terms)&&!is_wp_error($taxonomy_terms)){
echo '<ul>';
foreach($taxonomy_terms as $taxonomy_term): // foreach ループの開始
?>
<li><a href="<?php echo get_term_link($taxonomy_term); ?>"><?php echo $taxonomy_term->name; ?></a></li>
<?php
endforeach; // foreach ループの終了
echo '</ul>';
}
?>

タームに紐づく投稿の数でソートする

get_terms() を使ってターム一覧を表示した場合、orderby を使ってタームに紐づく投稿の数でソートすることができます。
例えば、タクソノミースラッグが news-cat で、タームに紐づく投稿が多い順にソートする場合は、次のコードを追加します。

<?php
$taxonomy_terms = get_terms( 'news-cat','orderby=count&hide_empty=1&order=DESC');
foreach ( $taxonomy_terms as $taxonomy_term ){
echo '<a href="'.get_term_link($taxonomy_term->slug, 'news-cat').'">'.$taxonomy_term->name.'</a>'; //タームのリンク
}
?>

orderby=count は投稿数、 hide_empty=1 は空のタームを出力しない、order=DESC は降順で並び替えます。
引数を指定することで、ソートの内容を自由にカスタマイズすることもできます。

まとめ

WordPress で get_terms を使ったターム一覧の表示方法を紹介しました。