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',//タクソノミ―
));