WordPressのカテゴリー・タグの取得まとめ

WordPressテーマをカスタマイズしていて、一番使うのが、カテゴリー系の関数ではないでしょうか?
あの時、どんな関数使った?→過去のテーマを見に行く。
そんなことばかり繰り返しているので、備忘録としてここに書いておくことにしました。

カテゴリーを取得

投稿に紐づくリンク付きのカテゴリー

投稿に紐づくリンク付きカテゴリーの取得は簡単です。

the_category();

デフォルトのまま使うと「post-categories」というクラスの付いたリスト形式で表示されます。

the_category(',');

のように、区切り文字を指定してあげるとよいでしょう。

投稿に紐づくリンクなしのカテゴリー

リンクなしで取得する場合、「get_the_category()」で、一度すべての情報を取得した後、カテゴリー名だけ表示するようにします。

$cats = get_the_category();
foreach($cates as $cat):
  echo $cat->cat_name;
endforeach;

カテゴリーの一覧を表示

一覧ページやメニューなどで、カテゴリーのリストを表示させたい時は、「wp_list_categories()」を使います。

<ul>
<?php wp_list_categories(array(
  'title_li' =>'', //デフォルトで出力されるタイトルを非表示
));?>
</ul>

タグを取得

投稿に紐づくリンク付きのタグ

the_tags();

このまま使うと、先頭に「タグ: 」という文字付きで、カンマ区切りでタグの一覧を表示します。

the_tags(',');

のように、区切り文字を指定してあげた方がいいです。

投稿に紐づくリンクなしのタグ

$tags = get_the_tags();
if(!empty($tags)): //タグがあったら
  foreach($tags as $tag):
    echo $tag->name;
  endforeach;
endif;

カテゴリーと違って、タグを持っていないこともあるので、if文でタグあったらという条件分岐をつけないと、エラーになる可能性があります。

タグの一覧(タグクラウド)

wp_tag_cloud();

タグクラウドですので、数によって文字サイズが変動します。
ちょっと、それはカッコ悪いので、Codexを参考に下記のようにカスタマイズして使ってます。

wp_tag_cloud(array(
  'smallest' => 1, //件数が少ないタグのフォントサイズ
  'largest' => 1, //件数が多いタグのフォントサイズ
  'unit' => 'em', //フォントサイズの単位
  'orderby' => 'count', //並び順 件数の多い順にしてます
  'order' => 'DESC',
  'number' => 0, //表示数 0は全て表示
));

カスタムタクソノミー(カスタム分類)の取得

カスタム投稿などで使用するカスタムタクソノミー(カテゴリーやタグ)には、それ用の関数を使わなければいけません。

リンク付きのターム

カテゴリーもタグも使う関数は「get_the_term_list()」です。

echo get_the_term_list($post->ID, カスタムタクソノミー名, $before, $sep, $after);

カスタムタクソノミー名が「custom_cat」、区切り文字を「,」にしたい場合

echo get_the_term_list($post->ID, custom_cat, '', ',', '');

「custom_cat」をリスト形式で表示したい場合

echo get_the_term_list($post->ID, custom_cat, '<ul><li>', '</li><li>', '</li></ul>');

リンクなしのターム

「get_the_category()」のときと同じく、一度すべてのタームを取得した後、ターム名だけ表示するようにします。

$terms = get_the_terms($post->ID, 'custom_cat');
foreach($terms as $term):
  echo $term->name;
endforeach;

タームの一覧を表示

<ul>
<?php wp_list_categories(array(
  'taxonomy' => 'custom_cat',//カスタム分類名
  'title_li' =>'', //デフォルトで出力されるタイトルを非表示
));?>
</ul>

カテゴリー・タグ取得のまとめ

いろいろ書いてみましたけど、結局「カテゴリー(category)」も「タグ(post_tag)」もタクソノミーの1つなんです。
デフォルトでカスタムタクソノミーの「category」「post_tag」が用意されているといえばわかりやすいでしょうか?
ですから、カスタムタクソノミーを取得・表示できれば、同じように「カテゴリー」も「タグ」も取得できます。
親子関係を気にしなければ、カテゴリーもタグもカスタムタクソノミーも全部一緒です。

投稿に紐づくタクソノミーのタームをリンク付きで表示

■カテゴリ
echo get_the_term_list($post->ID, categry, '', ',', '');
(the_category();)
■タグ
echo get_the_term_list($post->ID, post_tag, '', ',', '');
(the_tags();)
■カスタムタクソノミー(caustom_cat)://カテゴリー
echo get_the_term_list($post->ID, custom_cat, '', ',', '');
■カスタムタクソノミー(caustom_tag)://タグ
echo get_the_term_list($post->ID, custom_tag, '', ',', '');

投稿に紐づくタクソノミーのタームをリンクなしで表示

■カテゴリ
$terms = get_the_terms($post->ID, 'category');
($terms = get_the_category();)
■タグ
$terms = get_the_terms($post->ID, 'post_tag');
($terms = get_the_tags();)
■カスタムタクソノミー(caustom_cat);//カテゴリー
$terms = get_the_terms($post->ID, 'custom_cat');
■カスタムタクソノミー(caustom_tag)://タグ
$terms = get_the_terms($post->ID, 'custom_tag');

foreach($terms as $term):
  echo $term->name;
endforeach;

タクソノミーのタームの一覧を表示

wp_list_categories()」に「taxonomy」を指定してあげれば、カテゴリーでもタグでもカスタム分類でも、対応可能です。

■カテゴリ
<ul>
<?php wp_list_categories(array(
  'taxonomy' => 'category',//タクソノミー
  'title_li' =>'', //デフォルトで出力されるタイトルを非表示
));?>
</ul>
■タグ
<ul>
<?php wp_list_categories(array(
  'taxonomy' => 'post_tag',//タクソノミー
  'title_li' =>'', //デフォルトで出力されるタイトルを非表示
));?>
</ul>
■カスタムタクソノミー(caustom_cat):カテゴリー
<ul>
<?php wp_list_categories(array(
  'taxonomy' => 'custom_cat',//タクソノミー
  'title_li' =>'', //デフォルトで出力されるタイトルを非表示
));?>
</ul>
■カスタムタクソノミー(caustom_tag):タグ
<ul>
<?php wp_list_categories(array(
  'taxonomy' => 'custom_tag',//タクソノミー
  'title_li' =>'', //デフォルトで出力されるタイトルを非表示
));?>
</ul>

タグクラウド

■カテゴリ
wp_tag_cloud(array(
  'taxonomy' => 'category',//タクソノミ―
));
■タグ
wp_tag_cloud(array(
  'taxonomy' => 'post_tag',//タクソノミ―
));
■カスタムタクソノミー(caustom_cat):カテゴリー
wp_tag_cloud(array(
  'taxonomy' => 'custom_cat',//タクソノミ―
));
■カスタムタクソノミー(caustom_tag):タグ
wp_tag_cloud(array(
  'taxonomy' => 'custom_tag',//タクソノミ―
));

コメントを残す

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