先日コメントでこのような質問をいただきました。

「指定したタクソノミーのタームをすべて取得したいけど、記事が存在するタームしか表示されない。記事が存在しないタームも取得する方法はないか?」

wp_list_categories や get_terms を使えば、指定したタクソノミーのタームを取得することができますが、デフォルトの状態だと記事が作成されているタームしか取得してくれません。

質問者様は、サイト上の登録フォームで、カスタム分類、カテゴリを連動式にした選択項目を設けたいため、記事が存在していなくてもタームのリストを取得したいということでした。

そこでキーとなるのが hide_empty という引数です。hide_empty はデフォルトでは True(1) になっていて、タームに紐付く記事が存在しない場合はそのターム情報を取得しません。

結論から言っちゃうと hide_empty を False(0) にすれば、投稿のないタームも取得することができます。

get_termsで指定したタクソノミーに属するすべてのタームを取得する

get_terms を使って、指定したタクソノミーの一覧を表示するには、テーマファイル内のリストを表示させたい場所に以下のようなコードを記述します。

<?php
$terms = get_terms( 'タクソノミー名', 'hide_empty=0' );
if($terms) {
  foreach ( $terms as $term ) {
    echo '<a href="' .get_term_link($term). '">' . esc_html($term->name) . '</a>';
  }
}
?>

タクソノミー名の部分には、タームを取り出したいタクソノミー名を入れてください。

下記のように、get_termsのパラメータは配列で指定してもOKです。

<?php
$terms = get_terms(array(
  'taxonomy' => 'タクソノミー名',
  'hide_empty' => false,
));
if($terms) {
  foreach ($terms as $term) {
    echo '<a href="' . get_term_link($term) . '">' . esc_html($term->name) . '</a>';
  }
}
?>

wp_list_categoriesで指定したタクソノミーに属するすべてのタームを取得する

wp_list_categories については、以前「カスタムタクソノミーを投稿数付きでリスト表示させるためのテーマカスタマイズ」という記事を書きました。この時に紹介したコードを基に紹介したいと思います。

記事が存在しないタームも取得するので、投稿数はなしで表示させます。

<ul><?php wp_list_categories(array('title_li' => '', 'taxonomy' => 'タクソノミー名','hide_empty' => 0)); ?></ul>

こちらもタクソノミー名のところに、タームを取得したいタクソノミー名を入れてください。

あとがき

他に困っている方もいるかもしれないと思ったので、記事にさせていただきました。参考になれば幸いです。

投稿者

himecasのアバター

コメントを残す

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

Table of Contents