Top Blog(category) contact form

single.php

the_tags()とget_the_tags()の違い

目次

WordPressのthe_tags()get_the_tags()は、いずれも投稿に設定されたタグ情報を扱う関数ですが、出力の仕方使いどころに違いがあります。the_tags()はループ内で実行するとタグリンクを自動的にHTMLとして表示しますが、get_the_tags()はタグ情報を配列で取得して自分で表示を組み立てるための関数です。以下にそれぞれの特徴と利用例を示します。

  • the_tags():投稿に付けられたタグをリンク付きで簡単に表示するテンプレートタグです。ループ内で実行し、戻り値はなく(返り値なし)、デフォルトでは「タグ:」というラベルの後にタグ名がリンク付きで表示され、複数タグの場合はカンマ区切りとなりますkomaricote.comtagnote.net。引数で前後の文字列や区切り文字を指定して出力形式を変えることもできます。
  • get_the_tags():現在の投稿が持つタグ情報を**WP_Termオブジェクトの配列**で返す関数ですdeveloper.wordpress.org。直接HTML出力は行わず、ループ外でIDを指定することも可能です。戻り値はタグの配列(タグがなければfalse)です。取得したタグオブジェクトをループで回して独自のHTMLやクラス付与など自由な形式で表示したい場合に使いますkomaricote.comillustswitch.com

the_tags():シンプルなタグ一覧の出力例

<?php the_tags(); ?>

上記の例では、「タグ: 」という文字列の後にタグ名がリンク付きで出力されます。例えば投稿に「WordPress関数」と「テンプレートタグ」という2つのタグが付いていた場合、実際のHTML出力は次のようになります

<a href="https://example.com/tag/wp-functions/" rel="tag">WordPress関数</a>, 
<a href="https://example.com/tag/template-tag/" rel="tag">テンプレートタグ</a>

(上記はthe_tags()のデフォルト出力例ですtagnote.netnawate.jp。)

引数を使えば表示形式を変えることもできます。例えばリスト形式にしたい場合、$before<ul><li>$sep</li><li>$after</li></ul>を指定すれば次のようになりますwp-kama.com


<?php the_tags('<ul><li>','</li><li>','</li></ul>'); ?>

このようにすれば、出力がHTMLのリストになります(例としてタグ名が「タグ1」「タグ2」「タグ3」の場合)wp-kama.com


<ul>
  <li><a href="http://example.com/tag/tag1/" rel="tag">タグ1</a></li>
  <li><a href="http://example.com/tag/tag2/" rel="tag">タグ2</a></li>
  <li><a href="http://example.com/tag/tag3/" rel="tag">タグ3</a></li>
</ul>

このように、the_tags()すでにHTMLリンク形式でタグを出力してくれるため、簡単かつ高速にタグ一覧を表示できますkomaricote.comtagnote.net。ただし、返り値はなく出力しかできないため、細かいカスタマイズをしたい場合には限界があります。

get_the_tags():カスタム出力の例(ボタン風リンク)

一方、get_the_tags()はタグ情報を配列で取得するので、出力HTMLやクラス、スタイルを自由にカスタマイズできますkomaricote.comillustswitch.com。例えば、タグをボタン風にデザインしたい場合は以下のように書けます。タグのアーカイブページへのリンクはget_tag_link($tag->term_id)で取得し、タグ名は$tag->nameで取得しますillustswitch.com

<?php
$posttags = get_the_tags();
if ( $posttags ) {
    foreach ( $posttags as $tag ) {
        echo '<a href="' . esc_url(get_tag_link($tag->term_id)) . '" class="btn btn-primary">'
             . esc_html($tag->name) . '</a> ';
    }
}
?>

このコード例では、btn btn-primaryのようなクラスを各タグリンクに付与して「ボタン風」に装飾しています(例としてBootstrapのボタンクラスを使用)。実際の出力イメージは例えば以下のようになります(タグ名が「タグ1」「タグ2」として):


<a href="http://example.com/tag/tag1/" class="btn btn-primary">タグ1</a> 
<a href="http://example.com/tag/tag2/" class="btn btn-primary">タグ2</a> 

上記のように、get_the_tags()では取得したタグオブジェクトをループ処理して任意のHTMLを生成できるため、クラス名を付与したりリスト項目で囲むなど、柔軟な出力が可能ですillustswitch.comillustswitch.com。例えば、WPスイッチの例ではタグスラッグをクラス名にしたリスト表示も紹介されていますillustswitch.com

使い分けのポイント

  • シンプルにタグを表示したい場合:特に装飾が不要であれば、the_tags()で十分です。関数一発でリンク付きタグ一覧が出力されますkomaricote.comtagnote.net
  • カスタムHTMLで表示したい場合:タグにCSSクラスを付けたり特殊なレイアウト(ボタン風リンク、アイコン付き、リスト構造など)にしたいときは、get_the_tags()でタグオブジェクトを取得し、自分でforeachループで表示を組み立てるのが適していますkomaricote.comillustswitch.com
  • ループ外で使用する場合get_the_tags()は引数に投稿IDを指定すればループ外でも使えます(返り値は配列)developer.wordpress.orgthe_tags()は基本的にループ内で使用します。

以上のように、the_tags()は手軽な直接出力向け、get_the_tags()はカスタム出力向けの関数と考えて使い分けると良いでしょうkomaricote.comillustswitch.com

参考資料: WordPress公式ドキュメントやテンプレートタグ解説