投稿のカテゴリー表示 - 取得・出力方法まとめ【WordPress】 | KoMariCote

投稿のカテゴリー表示 – 取得・出力方法まとめ【WordPress】

更新2023/12/29

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-itemcat-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(); ?>

カテゴリー : WordPress

タグ :

TOPへ