WordPressのカテゴリー取得・出力方法メモです。
それぞれの場所でカテゴリーリンクを表示させることができますが、どのようにカテゴリーを表示させたいかによって方法が変わります。
投稿に登録しているカテゴリーをリンク付きで全て表示させる
投稿に登録しているカテゴリーを表示させる方法です。
wp_list_categories
wp_list_categories()
はこのコードを記述するだけで、カテゴリーをリンク付きテキストでリスト形式に表示させることができます。
<?php wp_list_categories(); ?>
出力されるHTMLは以下のような形です。
<li class="categories">カテゴリー
<ul>
<li class="cat-item cat-item-1"><a href="https://example.com/category/cat1/">カテゴリー1</a></li>
<li class="cat-item cat-item-2"><a href="https://example.com/category/cat2/">カテゴリー2</a></li>
</ul>
</li>
カテゴリー名のliタグには cat-item
と cat-item-[id]
のクラスが自動的に追加されます。
引数に何も指定しない場合、<li class="categories">カテゴリー</li>
のなかにカテゴリーリストが表示されるようになっています。そのためulタグで囲んで使用するようにします。
<ul><?php wp_list_categories(); ?></ul>
この「カテゴリー」というテキストを表示させたくない場合は、引数に title_li=
を追加してください。
<?php wp_list_categories('title_li='); ?>
get_categories
get_categories()
はカテゴリー情報を取得する関数です。この関数は取得のみで出力はされません。
カテゴリーオブジェクトが配列として入っているので、どの情報を取得するかを指定する必要があります。
wp_list_categories()
はとても簡単にカテゴリーリストを表示させることができますが、ある程度形が決まっているので、別の形で表示させたい場合は get_categories()
を使用します。
自分でHTML構造を決めたい、表示順序を任意に指定したい場合や、カテゴリー名とリンク以外にもカテゴリー情報を取得・出力させたいといった時に使える関数です。
以下のコードでは各カテゴリーテキストにリンクとスラッグと同様のクラスを付け、そのカテゴリーが付いている記事数も表示されます。
<?php
$cats = get_categories();
foreach ($cats as $cat):
$cat_name = $cat->name;
$cat_count = $cat->category_count;
$cat_url = get_category_link($cat->term_id);
$cat_slug = $cat->category_nicename
?>
<p class="<?php echo $cat_slug; ?>"><a href="<?php echo $cat_url; ?>"><span><?php echo $cat_name?></span><span>(<?php echo $cat_count; ?>)</span></a></p>
<?php endforeach; ?>
wp_dropdown_categories
wp_dropdown_categories()
はカテゴリーリストをドロップダウン形式で表示・取得することができる関数です。この関数はselectタグを使ってHTMLテキストを返します。
<?php wp_dropdown_categories(); ?>
上記のコードを記述すると以下のようなHTMLが出力されます。
<select name="cat" id="cat" class="postform">
<option class="level-0" value="1">Uncategorized</option>
<option class="level-0" value="2">カテゴリー1</option>
<option class="level-0" value="3">カテゴリー2</option>
</select>
単体で使ってもリストがドロップダウンで表示されるだけなので、カテゴリーページへ移動してもらうためにformタグで囲ってsubmitボタンを追加します。
<form action="<?php echo esc_url(home_url('/')); ?>" method="get">
<?php wp_dropdown_categories(); ?>
<input type="submit" name="submit" value="一覧を見る">
</form>
このコードでカテゴリーを選んだあと、「一覧を見る」ボタンをクリックするとカテゴリーページへアクセスすることができます。
記事のカテゴリーを取得・出力
特定の記事が所属しているカテゴリーを取得・出力させる方法です。
the_category
記事の詳細ページやループ内でカテゴリーを表示させるときは the_category()
でカテゴリーをリスト形式で表示できます。
<?php the_category(); ?>
【出力されるHTML】
<ul class="post-categories">
<li><a href="https://example.com/category/cat1/" rel="category tag">カテゴリー2</a></li>
<li><a href="https://example.com/category/cat2/" rel="category tag">カテゴリー1</a></li>
</ul>
一つ目のパラメーターに区切り文字を設定できます。
<?php the_category(', '); ?>
親カテゴリーのリンクも表示したい場合は、2つ目のパラメーターに mutiple を設定します。
<?php the_category(', ', 'multiple'); ?>
子カテゴリーのリンクにしつつ親カテゴリーも表示させたい場合は single にします。
<?php the_category('/', 'single'); ?>
get_the_category
get_the_category
は記事のカテゴリー情報の取得のみを行う関数です。カテゴリーを柔軟に出力させたい場合にはこちらを利用します。
<?php
$cats = get_the_category();
foreach ($cats as $cat):
$cat_name = $cat->name;
$cat_url = get_category_link($cat->term_id);
?>
<p><a href="<?php echo $cat_url; ?>"><?php echo $cat_name; ?></a></p>
<?php endforeach; ?>
get_the_category()
で取得するデータは、カテゴリーを一つのみ登録していたとしても配列データになっているので foreach文を使用して取り出します。
以下のように何番目に入っているカテゴリーかを指定すれば、foreach文は不要です。
<?php
$cat = get_the_category();
$cat = $cat[0];
echo $cat->cat_name;
?>
[0]
は最初のカテゴリー情報を指定するので、1つしかない場合はこのコードのまま利用できます。
1つの記事に複数のカテゴリーを登録しているが、1つのカテゴリーのみ表示させたい場合も上記の書き方が有効です。
子カテゴリーのみ表示させたいといった場合は以下のようなコードを記述します。
<?php
/* 子カテゴリーのみを表示する */
$cats = get_the_category();
foreach ($cats as $cat) {
$cat_name = $cat->name;
$cat_link = esc_url(get_category_link($cat->term_id));
if ($cat->parent) {
echo sprintf("<a href='%s'>%s</a>", $cat_link, $cat_name);
}
}
?>
【WordPress】混乱しやすいget_categoryとget_the_categoryの違いと使い分け方
カテゴリー名だけを取得・表示する
カテゴリーページのタイトルやパンくずなど、リンクはなしでカテゴリー名だけにしたい場合もあります。get_the_category
でもカテゴリー名だけを表示させることができますが、single_cat_title()
を使えばこのコードだけでURLに合わせてカテゴリー名が表示されます。
<?php single_cat_title(); ?>