WordPressでカテゴリ一覧を表示することは多いです。
サイドバーに設置したり、セレクトボックスに使用するなど様々な場所で使用することになります。
カテゴリ一覧、またカスタムタクソノミーの一覧を表示する方法を解説します。
カテゴリの一覧を表示する
「get_categories」を使用してカテゴリを取得する
「get_categories」はパラメータで条件を指定して、それにマッチした値を配列で返します。
<?php $categories = get_categories( $args ); ?>
パラメータ、初期値に関しては公式ドキュメントの方をご確認ください。
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_categories
よく使うパラメータ一覧
よく使うパラメータを記載します。
child_of | 指定したカテゴリの直接の子カテゴリを指定する。 |
orderby | データの並び順を指定する。 ・id、name、slug等 |
order | 並び替えの昇順降順を指定する。 ・ASC ・DESC |
hide_empty | 投稿が存在しないカテゴリを取得するかどうかを指定する。 ・1 【取得しない】 初期値 ・0 【取得する】 |
taxonomy | 指定したタクソノミーのカテゴリ(ターム)を |
よく使う戻り値
戻り値は以下のような配列で返ります。
よく使う値を記します。
0 =>
object(WP_Term)
public 'term_id' => int 3 //ID
public 'name' => string 'カテゴリー2' //カテゴリ名
public 'slug' => string 'cat2' //カテゴリスラッグ
public 'count' => int 2 //投稿数
public 'term_taxonomy_id' => int 3 //タクソノミーID
public 'taxonomy' => string 'category'//タクソノミー名
しかし、戻り値にリンクはありませんので、「get_category_link」を使用します。
「get_category_link」を使用してリンク付きのカテゴリ一覧を表示
指定したカテゴリIDのアーカイブページのURLを取得します。
<?php get_category_link( $category_id ); ?>
<?php
$args = array(
'orderby' => 'id',
'order' => 'asc',
'hide_empty' => 0,
);
$categories = get_categories( $args );
?>
<ul>
<?php foreach( $categories as $category ) : ?>
<li>
<!--取得したIDを使用し、get_category_linkでリンクを取得-->
<a href="<?php echo get_category_link( $category->term_id ); ?>">
<!--カテゴリ名を表示-->
<?php echo $category->name; ?>
</a>
</li>
<?php endforeach; ?>
</ul>
「get_terms」でカテゴリ一覧を取得する
指定したタクソノミーのタームを取得します。
パラメータなどは、get_categoriesと似てるので割愛。
「get_term_link」でカテゴリリンクを取得する
「get_terms」の場合は、リンクを「get_term_link」で取得します。
<?
//タームのID,スラッグと、タクソノミースラッグを指定してリンクを取得。
php get_term_link( $term, $taxonomy );
?>
<?php
//通常の投稿のカテゴリは'category'で指定します。
$taxonomy = 'category';
$terms = get_terms($taxonomy);
foreach ($terms as $term) : ?>
<li>
<a href="<?php echo get_term_link($term->slug,$taxonomy) ?>">
<?php echo $term->name; ?>
</a>
</li>
<?php endforeach; ?>
「wp_list_categories」でリンク付きのカテゴリ一覧を取得する
「wp_list_categories」もカテゴリ一覧を取得します。
「get_categories」との違いは、リンク付きの一覧をそのまま返してくれることです。
また、初期値ではリスト<ul>形式で返されるので、テンプレートの記述が簡潔に書けます。
<?php
//パラメータ指定 'title_li'はリストの外側に表示されるタイトルです。
//初期値は'Categories'が表示されるので消してます。
$args = array(
'title_li' => '',
);
wp_list_categories($args);
?>
カスタムタクソノミー一覧を表示する
タクソノミー一覧も、同じテンプレートタグで取得できます。
'taxonomy'パラメータに、取得したいタクソノミーのスラッグを指定します。
「get_categories」を使用してカスタムタクソノミー一覧を取得する
「taxonomy」パラメータに取得したいタクソノミー名を指定します。
<?php
//取得したいタクソノミー名を指定。
//例)犬タクソノミーを取得
$args = array(
'taxonomy' => 'dog',
);
$categories = get_categories( $args );
?>
<ul>
<?php foreach( $categories as $category ) : ?>
<li>
<a href="<?php echo get_category_link( $category->term_id ); ?>">
<?php echo $category->name; ?>あ
</a>
</li>
<?php endforeach; ?>
</ul>
「get_terms」でカスタムタクソノミー一覧を取得する
<?php
$taxonomy = 'dog';
$terms = get_terms($taxonomy);
foreach ($terms as $term) : ?>
<li><a href="<?php echo get_term_link($term->slug,$taxonomy) ?>"><?php echo $term->name; ?></a></li>
<?php endforeach; ?>
「wp_list_categories」を使用してリンク付きカスタムタクソノミー一覧を取得する
<ul class="questions_catList">
<?php
$args = array(
'taxonomy' => 'dog',
'title_li' => '',
);
wp_list_categories($args);
?>
</ul>
どれを使えばいいの?
似たようなテンプレートタグがあり、どれを使えばいいのかと思うかもしれません。
私的には、ただリンク付きの一覧を表示するだけなら、「wp_list_categories」を使うのが簡単だと思います。
「get_terms」、「get_categories」はカテゴリ情報を取得して、データの加工や処理に使いたい場合に使用すれば良いと思います。
また、ワードプレスに関してもっと知りたい方は、おススメ書籍を解説してますのでこちらもご参考下さい。