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
: タクソノミー名(例:category
、post_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()
は、投稿に関連するタクソノミー用語をリンク付きで出力する便利なテンプレートタグです。カテゴリーやタグ、カスタムタクソノミーの情報をシンプルに表示するのに適しています。
get_the_terms()
などの関連タグと組み合わせることで、より柔軟な表示が可能になります。また、空のケースに対する処理を入れることで、ユーザー体験を向上させることができます。
コメント