「記事内に投稿のタグ一覧を表示したい」
「特定のタグだけ取得したい」

など、タグを扱う場面は多いです。当記事では、WordPressでタグを取得できる基本的な関数を5つまとめました。どれも引数の解説と具体的な使用例をセットで紹介してまますので、ぜひ参考にしてください。

投稿のタグを取得できる関数5つ

WordPressで投稿のタグを扱うなら、以下の5つが代表的な関数になります。順番にご紹介します。

get_tag() 特定のタグを取得 公式ページ
get_tag_link() 特定のタグのリンク文字列を取得 公式ページ
the_tags() 投稿に紐づくすべてのタグをリンク付きで表示 公式ページ
get_the_tags() 投稿に紐づくすべてのタグを配列で取得 公式ページ
wp_tag_cloud() タグクラウドを表示 公式ページ

get_tag():特定のタグを取得

特定のタグを1つ選んで情報を取得するときに使います。

get_tag( $tag, $output, $filter );
$tag 取得したいタグのIDを指定(オブジェクトも可)
$output 出力形式を以下から選んで指定
・OBJECT:オブジェクト(初期値)
・ARRAY_A:連想配列
・ARRAY_N:インデックス配列
$filter フィルターを指定(省略時は”raw’)
こちらの詳細はsanitize_term_field()の内部処理を参照

引数は以下の3つを指定できますが、基本的には第一引数のみ指定して使うことが多いです。名前や説明文など、タグ編集画面の基本情報はすべて取得できます。

// IDが24のタグを取得
$tag = get_tag( 24 );

// このタグの情報を表示
echo $tag->name; // 名前
echo $tag->description; // 説明
echo $tag->slug; // スラッグ

ただし、スラッグ単体は取得できるものの、アーカイブページのURL(https://〜)を直接取得することはできません。リンクを取得する場合は次に紹介する関数を利用します。

get_tag_link():特定のタグのリンクを取得

こちらは特定のタグのリンクを取得するときに利用します。get_tag()がリンク取得に特化したものとお考えください。

get_tag_link( $tag );
$tag リンクを取得したいタグのIDを指定(オブジェクトも可)

内部でエスケープ処理を行っていないため、出力する時はesc_url()でURLを無害化しましょう。基本的には以下のようにget_tag()と合わせて使うことが多いですね。

// IDが24のタグのリンク文字列を取得
echo esc_url( get_tag_link( 24 ) );

// 出力結果
// http://example.com/tag/tag_slug/"

// IDが24のタグのリンクを作成
$tag = get_tag( 24 );
echo '<a href="' . esc_url( get_tag_link( $tag ) ) . '">';
echo $tag->name;
echo '</a>';

the_tags():投稿に紐づくすべてのタグをリンク付きで表示

1つの投稿に紐付けられたタグだけをリンク付きで出力します。WordPressループ内で使う必要があります。

the_tags( $before, $sep, $after );
$before タグ一覧の前に表示する文字列(省略時は「タグ:」)
$sep タグ1つ1つを区切る文字列(省略時は「,」)
$after タグ一覧の後に表示する文字列(省略時は無し)

引数に何も指定せずに出力すると、1つ1つのタグがaタグに囲まれ「,」区切りで表示されます。

<?php
// 投稿に「タグA」と「タグB」が設定されている場合
the_tags();

// 出力結果
?>
タグ: <a href="タグAのリンク" rel="tag">タグA</a>, <a href="タグBのリンク" rel="tag">タグB</a>

これだとリストの前の文字「タグ:」や区切りが気になりますが、引数を使うことで簡単なカスタマイズを施すことができます。以下は、タグリストを「div」で囲み、区切りをなくした使用例になりますので、参考にしてください。

<?php
// 投稿に「タグA」と「タグB」が設定されている
the_tags(
  '<div class="tag_list">', // タグリストの前にdivの開始タグを指定
  '', // 区切り線
  '</div>' // タグリストの後にdivの終了タグを指定
);

// 出力結果
?>
<div class="tag_list">
  <a href="タグAのリンク" rel="tag">タグA</a>
  <a href="タグBのリンク" rel="tag">タグB</a>
</div>

get_the_tags():投稿に紐づくすべてのタグを配列で取得

投稿に紐づくタグのオブジェクトを配列で取得できる関数です。the_tags()は出力形式を決められていましたが、こちらは取得した情報をもとにHTMLを組めます。

get_the_tags( $post );
$post タグを取得したい投稿のID

実際にタグのオブジェクトを配列で取得して、リストタグで出力する流れが以下になります。タグの情報とHTMLが紐づいていないので、データを扱いやすいです。

// WordPressループ内で各投稿に紐づくタグをリスト形式で表示する
$tags = get_the_tags();
if( $tags ){
  echo '<ul>';
  foreach( $tags as $tag ){
    echo '<li>';
    echo '<a href="' . esc_url( get_tag_link( $tag ) ) . '">' . esc_html( $tag->name ) . '</a>';
    echo '</li>';
  }
  echo '</ul>';
}

wp_tag_cloud():タグクラウドを表示

登録しているタグをすべて取得・表示したい時に使います。引数には配列形式で様々なパラメータを指定できます。一般的に使うであろうパラメータを以下にまとめてますので、自分好みにカスタマイズしてみてください。

wp_tag_cloud( $args );
smallest 最小の文字サイズ 省略時:8
largest 最大の文字サイズ 省略時:22
unit 文字サイズの単位 省略時:pt
number 表示するタグの数(0なら全部表示) 省略時:45
format 出力形式(他には’list’や’array’) 省略時:flat
separator タグの区切り 省略時:改行
orderby 並び替え対象(’count’にすると投稿数が多い順に) 省略時:name
order 並び順(他には’DESC‘や’RAND‘) 省略時:ASC
show_count タグと紐づいた投稿の数 省略時:0
echo 出力するかどうか 省略時:true

気になる出力形式ですが、引数を何も指定しなければ以下のHTMLが出力されます。実際にみてみると分かるのですが、文字サイズはバラバラでそのまま使うのは厳しいです。

<?php
// 引数を指定しない場合
wp_tag_cloud();

// 出力結果
?>
<a href="タグのリンク先" class="tag-cloud-link tag-link-【タグID】 tag-link-position-1" style="font-size: 8pt;" aria-label="タグの名前 (1個の項目)">タグの名前</a>
︙

もしリスト形式で、記事の上下に挿入するなら以下のように引数を書き換えて使ってみてください。文字サイズも統一され、非常に扱いやすくなったはずです。

<?php
// リスト形式で出力したい時のオススメ
wp_tag_cloud( array(
  'smallest' => 1,
  'largest' => 1,
  'unit' => 'em',
  'number' => 0,
  'format' => 'list'
) );

// 出力結果
?>
<ul class='wp-tag-cloud' role='list'>
  <li>
    <a href="タグのリンク先" class="tag-cloud-link tag-link-【タグID】 tag-link-position-1" style="font-size: 1em;">タグの名前</a>
    ︙
  </li>
</ul>

まとめ

今回は、投稿のタグを取得できる関数を5つご紹介しました。以下に各関数がどのタグを対象としているかで分類してますので、ぜひ参考に使い分けてください。

特定のタグ(1つ) get_tag()
get_tag_link()
投稿に紐づくタグ the_tags()
get_the_tags()
すべてのタグ wp_tag_cloud()

なお、投稿のカテゴリーも同じような方法で取得できます。以下にカテゴリーを取得できる関数をまとめてますので、こちらも合わせてご覧ください。