投稿に付いているタグや登録されているタグの取得・出力方法

WordPressでタグを表示させたい、情報を取得したい場面はさまざまあるかと思います。そしてそのいろいろな状況に応じてタグを取得・出力するコードがWordPressには用意されています。

この記事では、タグ一覧ページで動的にタグ名を表示、登録されている全てのタグの取得・出力、記事に付いているタグを取得・出力する方法などをまめていきます。

一覧ページでタグ名を表示させる【single_tag_title()】

特定のタグ一覧ページにタグ名を表示させる場合は single_tag_title() で簡単に表示させることができます。archive.phptag.php といったファイルが対象になります。

<?php single_tag_title(); ?>

同じようなテンプレートタグでカテゴリー名を表示させる single_cat_title() というものもあります。関数名の違いはありますが、内部では同じ動作をしているので、どちらを使ってもちゃんとカテゴリーページ一覧ではカテゴリー名、タグ一覧ページではタグ名が表示されます。

記事に付与されているタグ全てを取得【get_tags()】

サイドバーやヘッダー・フッターなど共通部分で、投稿に付いているタグの一覧を表示させたい時には、get_tags() が使えます。特定の投稿に限らず、全ての記事から使用されているタグ情報を全て取得します。

get_tags() は配列を返すので foreach を使って1つ1つの値を取り出します。リンクをつけたい場合は get_tag_link() を使用するのが便利です。

<ul>
  <?php
    $all_tags = get_tags();
    foreach($all_tags as $tag) :
      $tag_link = get_tag_link($tag->term_id);
      $tag_name = $tag->name;
  ?>
    <li><a href="<?php echo $tag_link; ?>"><?php echo $tag_name; ?></a></li>
  <?php endforeach; ?>
</ul>

タグ名以外にスラッグやID、タグが付いている投稿数、タグの説明なども取得できます。

$tag->name         // タグ名
$tag->slug         // タグのスラッグ
$tag->term_id      // タグのID
$tag->description  // タグの説明
$tag->count        // タグが付いている記事数

タグがついている投稿数を表示させる

countプロパティを利用することで、タグの記事数も表示させることができます。

<ul>
  <?php
    $all_tags = get_tags();
    foreach($all_tags as $tag) :
      $tag_link = get_tag_link($tag->term_id);
      $tag_name = $tag->name;
      $tag_count = $tag->count;
  ?>
    <li><a href="<?php echo $tag_link; ?>"><?php echo $tag_name; ?>(<?php echo $tag_count; ?>)</a></li>
  <?php endforeach; ?>
</ul>

タグの順序を変更して表示

get_tags() の引数を設定して、表示順序などを変更することもできます。

<?php
  $args = [
    'orderby' => 'count',
    'order' => 'DESC',
  ];
  $desc_order_tags = get_tags($args);
?>
<ul>
  <?php
    foreach($desc_order_tags as $tag):
      $tag_link = get_tag_link($tag->term_id);
      $tag_name = $tag->name;
      $tag_count = $tag->count;
  ?>
    <li><a href="<?php echo $tag_link; ?>"><?php echo $tag_name ?>(<?php echo $tag_count; ?>)</a></li>
  <?php endforeach; ?>
</ul>

引数を利用することで、順序を変更する以外にも特定のタグのみを表示させるといったこともできます。

毎回同じ順番ではなく、ランダムにタグを表示させたい場合、shuffle() というPHP関数を使って表示順序をシャッフルさせることができます。

<?php
  $all_tags = get_tags();
  // このコードを追加
  shuffle($all_tags);
?>
<ul>
  <?php
    foreach($all_tags as $tag):
      $tag_link = get_tag_link($tag->term_id);
      $tag_name = $tag->name;
  ?>
    <li><a href="<?php echo $tag_link; ?>"><?php echo $tag_name ?></a></li>
  <?php endforeach; ?>
</ul>

このように記述することでアクセスする度にタグの表示順序が変わります。

wp_tag_cloud でタグリストを表示

WordPressではタグクラウドを簡単に表示できるテンプレートタグ wp_tag_cloud() が用意されています。

wp_tag_cloud() を利用するとより簡単にタグのリンクつきリスト一覧が表示できます。付いている投稿数が多いタグはテキストが大きく表示されるようになっています。登録されていても投稿に付けられていないタグは表示されません。

<?php wp_tag_cloud(); ?>

デフォルトでパラメータが設定されているので、見せ方を変えたい場合は値を変更することでカスタマイズできます。

各記事に付いているタグを取得&表示

記事一覧や記事の詳細ページでタグを表示させたい場合、いくつか方法があります。表示のさせ方によって使い分けてみてください。

the_tags を使ってリンク付きのタグ名を表示

リンク付きのタグ名を表示させたい場合は the_tags() というテンプレートタグが一番簡単です。

<?php the_tags(); ?>

上記のように書くだけでリンク付きのタグが自動表示されます。

表示例

タグ: タグ01, タグ02

the_tags() は簡単で便利なのですが、その分融通が効かないところもあります。リンクを付けないでタグ名だけ表示したいといった場合は get_the_tags() を使います。

get_the_tags で取得して出力

get_the_tags()get_tags() と同様に配列を返すので foreach を使って1つ1つの値を取り出します。例えば、アーカイブページで各投稿にタグ名を表示させたい場合、このような感じで使えます。

<ul>
  <?php while(have_posts()) : the_post(); ?>
    <li>
      <h2><?php the_title(); ?></h2>
      <?php
        $post_tags = get_the_tags();
        if ($post_tags):
          foreach($post_tags as $tag) {
            $post_tag_name = $tag->name;
          }
      ?>
        <ul>
          <li><?php echo $post_tag_name; ?></li>
        </ul>
      <?php endif; ?>
    </li>
  <?php endwhile; ?>
</ul>

条件分岐がないと、タグが全ての投稿記事についていない場合エラーになってしまうので、if文はつけるようにしておきましょう。全ての記事に必ずタグをつけるのであればif文はなくても大丈夫ですが、付け忘れもあると思うのであった方が安全です。

get_tag_link() を使ってリンク付きのタグ表示もできます。

<ul>
  <?php
    $post_tags = get_the_tags();
    if ($post_tags):
      foreach($post_tags as $tag) {
        $post_tag_link = get_tag_link($tag->term_id);
        $post_tag_name = $tag->name;
      }
  ?>
    <li><a href="<?php echo $post_tag_link; ?>"><?php echo $post_tag_name; ?></a></li>
  <?php endforeach; ?>
</ul>

タグを1つだけ表示させたいという場合は配列から一つ選んで取り出す、ということもできます。

<?php
  $tag = get_the_tags();
  $tag_name = $tag[0]->name;
?>
<p><?php echo $tag_name; ?></p>

$tag[0] は配列の一番初めのものを取り出すという指示です。このように記述すると複数タグが付いている場合でも、タグは一つのみ表示されます。複数のタグを表示させるとレイアウトが崩れる…といった場合に使えると思います。

get_tags と get_the_tags の違い

get_the_tags()特定の投稿に付いているタグの情報を取得します。ループの外で使用しても何も取得されません。

get_tags()記事に付けられている全てのタグ情報を取得します。ループの内外関係なく、同じタグリストが表示されます。

使用する場所によって、また表示させたいタグ情報によって使い分けていきます。

カテゴリー : WordPress

TOPへ