WordPressの個別ページ(single.php)で、カテゴリ名などの情報を取得できなくて困ったことはないでしょうか?WordPressは一覧ページ(ループするコンテンツ)と個別ページでカテゴリの取得方法が違うのでこういた問題が起こります。
今回は個別ページ(single.php)での出力方法をご紹介いたします。
get_the_category()でカテゴリー情報を出力する方法
先に取得方法を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $category = get_the_category(); $cat = $category[0]; //カテゴリー名 $cat_name = $cat->name; //カテゴリーID $cat_id = $cat->cat_ID; //カテゴリースラッグ $cat_slug = $cat->slug; ?> |
個別ページ(single.php)で、カテゴリー情報を呼び出す場合はget_the_category();を使います。
上記のように、カテゴリー名・カテゴリーID・カテゴリースラッグをそれぞれ取得することができます。取得した情報を出力させる方法は下記になります。
1 |
<p><?php echo $cat_name; ?></p> |
また、ここにカテゴリー一覧へのリンクを加えることも可能です。この出力方法は下記になります。
1 |
<p><a href="<?php echo esc_url(get_category_link($cat_id)); ?>">$cat_name</a></p> |
個別ページ(single.php)でカテゴリを取得する方法は以上になりますが、ここで疑問を持たれたかたもいるかと思います。そう、それは「記事が複数のカテゴリーに属する場合の出力はどうするのか?」ということです。
実は、上記の方法は、代表的なカテゴリーを1つだけ取得する方法になります。(正確には$categoryの配列の中の一番最初のカテゴリー)
個別ページ(single.php)で複数あるカテゴリーをすべて取得する方法については、次章で解説いたします。
複数あるカテゴリーをすべて出力させる場合
リストタグ「ul, li」を使ってカテゴリーを出力するイメージでサンプルコードをご覧ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $category = get_the_category(); if (!empty( $category )) { ?> <ul> <?php foreach($category as $cat){ echo '<li>' . $cat->cat_name . '</li>'; } ?> </ul> <?php } ?> |
カテゴリーがない記事というのは基本的にないと思いますが、もし出力されない場合は要素が空の「ul」ができてしまうので、一応「if ( !empty($category) )」で回避しております。
例はforeach文を使った出力方法です。この方法で記事が属するすべてのカテゴリー名が出力されます。
リンク付きで取得したい場合は「echo ‘<li>’ . $cat->cat_name . ‘</li>’;」部分を下記に置き換えて使用してください。
1 |
echo '<li><a href="' . get_category_link( $cat->cat_ID ) . '">' . $cat->cat_name . '</a></li>'; |