MENU

the_terms()

the_terms() は、特定の投稿に関連するタクソノミーの用語を取得し、リンク付きで直接表示するテンプレートタグです。

カテゴリーやタグ、カスタムタクソノミーの用語を自動的にHTML整形して表示するのに便利です。

目次

機能の説明

the_terms() は、指定した投稿に紐づくタクソノミーの用語をHTML形式で出力します。

リンク付きで表示されるため、テンプレートファイルにそのまま組み込むことが可能です。

シンプルなコード例

<?php the_terms( get_the_ID(), 'category', 'カテゴリー: ', ', ', '' ); ?>

このコードは、現在の投稿に関連するカテゴリーのリンク付きリストを「カテゴリー: 」という見出しと共に表示します。

使い方の解説

the_terms() は以下のような構成で使用します:

the_terms( $post_id, $taxonomy, $before, $sep, $after );
  • $post_id: 投稿ID(例:get_the_ID()
  • $taxonomy: タクソノミー名(例:categorypost_tag、カスタムタクソノミーの名前)
  • $before: 出力の前に挿入する文字列やHTML
  • $sep: 用語間の区切り文字
  • $after: 出力の後に挿入する文字列やHTML

使用例:

<?php the_terms( get_the_ID(), 'post_tag', '<p>タグ: ', ', ', '</p>' ); ?>
  • post_tag: 「タグ」タクソノミーを指定
  • 出力例:<p>タグ: タグ1, タグ2, タグ3</p>
  • 用語間をカンマ(, )で区切り、タグ全体を <p> タグで囲んでいます。

特定のCSSクラスを付与した出力(タームのスタイリング):

$terms = get_the_terms(get_the_ID(), 'post_tag');
if ($terms && !is_wp_error($terms)) {
    echo '<ul class="tag-list">';
    foreach ($terms as $term) {
        echo '<li class="tag-item">' . esc_html($term->name) . '</li>';
    }
    echo '</ul>';
}
  • get_the_terms()でタームの配列を取得し、ulタグでリスト表示しています。
  • CSSで.tag-list.tag-itemにスタイルを適用可能です。

ポイント

デザインの自由度が増し、柔軟にスタイル設定ができます。

基本的な条件分岐と配列操作の知識が必要です。

タームにリンクを付けて出力する:

$terms = get_the_terms(get_the_ID(), 'genre');
if ($terms && !is_wp_error($terms)) {
    echo '<ul class="genre-list">';
    foreach ($terms as $term) {
        $term_link = get_term_link($term);
        echo '<li><a href="' . esc_url($term_link) . '">' . esc_html($term->name) . '</a></li>';
    }
    echo '</ul>';
}
  • get_term_link()を使って、タームにリンクを付けます。
  • この例ではカスタムタクソノミーgenreのタームを出力しています。

ポイント

タームにリンクを付けることで、ユーザーが関連するコンテンツに遷移しやすくなります。

リンク処理と、条件分岐を理解する必要があります。

投稿タイプ別タクソノミーの切り替え:

$post_type = get_post_type();
$taxonomy = ($post_type === 'book') ? 'genre' : 'category';

the_terms(get_the_ID(), $taxonomy, 'Related: ', ', ', '.');

投稿タイプに応じてタクソノミーを切り替えて表示します。

例えば、book投稿タイプではgenreタクソノミー、その他ではcategoryを使います。

ポイント

異なる投稿タイプに対応できるため、カスタム投稿タイプを多用するサイトで便利です。

投稿タイプの判定処理が必要です。

タームの数に応じた出力フォーマットの変更:

$terms = get_the_terms(get_the_ID(), 'post_tag');
if ($terms && !is_wp_error($terms)) {
    $count = count($terms);
    if ($count > 5) {
        echo '<ul class="many-tags">';
    } else {
        echo '<ul class="few-tags">';
    }
    foreach ($terms as $term) {
        echo '<li>' . esc_html($term->name) . '</li>';
    }
    echo '</ul>';
}

タームの数に応じてレイアウトを変更します。

タームが多いときはmany-tags、少ないときはfew-tagsクラスを使います。

ポイント

柔軟なレイアウト変更に役立ちます。

配列操作と条件分岐が必要です。

AJAXでタームを非同期にロードする:

document.addEventListener('DOMContentLoaded', () => {
    const loadButton = document.getElementById('load-terms');
    loadButton.addEventListener('click', () => {
        fetch('/wp-admin/admin-ajax.php?action=get_terms&post_id=' + loadButton.dataset.postId)
            .then(response => response.text())
            .then(data => {
                document.getElementById('terms-container').innerHTML = data;
            });
    });
});
add_action('wp_ajax_get_terms', 'load_terms');
add_action('wp_ajax_nopriv_get_terms', 'load_terms');

function load_terms() {
    $post_id = intval($_GET['post_id']);
    $terms = get_the_terms($post_id, 'category');
    if ($terms && !is_wp_error($terms)) {
        foreach ($terms as $term) {
            echo '<p>' . esc_html($term->name) . '</p>';
        }
    }
    wp_die();
}
  • AJAXを使って非同期でタームをロードします。
  • ボタンをクリックするたびにタームがロードされ、ページ全体をリロードする必要がありません。

ポイント

大規模なサイトでパフォーマンスを向上させるために有効です。

JavaScriptとPHPの連携が必要で、AJAX処理を理解する必要があります。

一緒に使うことが多い関連タグ

get_the_terms()

get_the_terms() は、投稿に関連するタクソノミー用語を配列形式で取得するテンプレートタグです。取得した用語を自由に操作したい場合に使います。

$terms = get_the_terms( get_the_ID(), 'category' );
if ( !empty( $terms ) ) {
    foreach ( $terms as $term ) {
        echo '<a href="' . esc_url( get_term_link( $term ) ) . '">';
        echo esc_html( $term->name );
        echo '</a> ';
    }
}
  • get_the_terms() で取得した用語をループで回し、リンク付きで表示します。
  • get_term_link() で、用語のアーカイブページへのリンクを生成します。

get_the_category()

get_the_category() は、現在の投稿に紐づくカテゴリーを配列形式で取得します。

$categories = get_the_category();
foreach ( $categories as $category ) {
    echo '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '">';
    echo esc_html( $category->name );
    echo '</a> ';
}

追加情報を取得したい場合

用語に関する追加情報を取得する例

the_terms() ではなく、get_the_terms() を使うことで、用語に関する詳細な情報を取得できます。

$terms = get_the_terms( get_the_ID(), 'category' );
if ( !empty( $terms ) ) {
    foreach ( $terms as $term ) {
        echo 'カテゴリー名: ' . esc_html( $term->name ) . '<br>';
        echo 'スラッグ: ' . esc_html( $term->slug ) . '<br>';
        echo '説明: ' . esc_html( $term->description ) . '<br>';
    }
}

出力できる情報

  • name:用語の名前
  • slug:用語のスラッグ(URLフレンドリーな名前)
  • description:用語の説明文
  • count:投稿がいくつその用語に紐づいているか

想定されるトラブル

タクソノミーに用語が紐づいていない

投稿に関連する用語が存在しない場合、空白の出力になります。

解決方法

if ( !empty() ) チェックを行い、代替メッセージを表示します。

$terms = get_the_terms( get_the_ID(), 'post_tag' );
if ( !empty( $terms ) ) {
    the_terms( get_the_ID(), 'post_tag', '<p>タグ: ', ', ', '</p>' );
} else {
    echo '<p>タグはありません。</p>';
}

Q&A

カスタムタクソノミーにも対応していますか?

はい、the_terms() はカスタムタクソノミーにも対応しています。taxonomy パラメータにカスタムタクソノミーの名前を指定してください。

<?php the_terms( get_the_ID(), 'custom_taxonomy', '', ', ', '' ); ?>

用語を取得せず、直接出力するのはなぜですか?

the_terms() は出力を行うため、HTMLタグの組み込みが必要な場合に向いています。配列形式での取得が必要な場合は get_the_terms() を使用してください。

タクソノミーが複数ある場合、どう表示されますか?

指定したタクソノミーのすべての用語が、区切り文字で区切られて出力されます。

まとめ

the_terms() は、投稿に関連するタクソノミー用語をリンク付きで出力する便利なテンプレートタグです。カテゴリーやタグ、カスタムタクソノミーの情報をシンプルに表示するのに適しています。

get_the_terms() などの関連タグと組み合わせることで、より柔軟な表示が可能になります。また、空のケースに対する処理を入れることで、ユーザー体験を向上させることができます。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次