ACFでタームに追加したカスタムフィールドの値を出力する方法【WordPress】

ACFでタームに追加したカスタムフィールドの値を出力する方法 WordPress

こんにちは!コーダーのゆうしです。

ACF(Advanced Custom Fields)を使っていると「カスタムタクソノミーのタームにフィールドを追加して、その値を表示したい」という場面があります。通常の投稿へのフィールド表示は情報が多いですが、ターム(カテゴリや任意のタクソノミー)への追加は情報が少なくて詰まりやすいポイントです。この記事では実際のコードと合わせて解説します。

タームのカスタムフィールドとは?

ACFでは投稿だけでなく、カテゴリやカスタムタクソノミーのターム(例:「東京」「大阪」などのエリア情報)にもカスタムフィールドを追加できます。例えば不動産サイトでエリアごとの説明文や画像を管理したいときなどに活用できます。

フィールドグループの設定

まずACFの管理画面でフィールドグループを作成し、表示条件を「タクソノミー」に設定します。

設定したフィールドは対象のタクソノミーのターム編集ページに表示されます。

カテゴリー追加

こんな感じで一番下にテキストエリアが表示されます。今回は「カテゴリーの補足情報」としました。

実装コード

<?php the_field('フィールド名', 'タクソノミー名_タームID'); ?>

具体的な例はこちらです。タクソノミー名が area、タームIDが 5 の場合はこうなります。

<?php the_field('description', 'area_5'); ?>

第二引数の形式は 'タクソノミー名_タームID' です。アンダースコアでつなぐのがポイントで、ここを間違えると値が出力されないので注意してください。

動的にタームIDを取得する

ターム編集ページやアーカイブページなど、表示しているタームが変わる場合は動的にタームIDを取得するほうが便利です。

アーカイブページ(taxonomy.php)で使う場合

<?php
$term = get_queried_object(); // 現在のタームオブジェクトを取得
$term_id = $term->term_id;   // タームIDを取得
$taxonomy = $term->taxonomy; // タクソノミー名を取得

the_field('description', $taxonomy . '_' . $term_id);
?>

get_queried_object() で現在表示中のタームの情報をまとめて取得できます。タクソノミー名とタームIDを動的に組み合わせているので、どのタームのアーカイブページでも正しく動作します。

特定のタームの値を取得して変数に入れる場合

<?php
$value = get_field('description', 'area_5');
echo esc_html($value);
?>

the_field() の代わりに get_field() を使うと変数に値を入れて加工できます。

躓きやすいポイント

値が表示されない

第二引数の形式が間違っている場合がほとんどです。'タクソノミー名_タームID' の形式になっているか、タクソノミー名とタームIDが正しいか確認してください。カテゴリの場合はタクソノミー名が category になります。

// カテゴリの場合
the_field('フィールド名', 'category_5');

// カスタムタクソノミー「area」の場合
the_field('フィールド名', 'area_5');

フィールドグループの表示条件が合っていない

ACFのフィールドグループ設定で表示条件が正しく設定されていないと、ターム編集ページにフィールドが表示されません。フィールドグループの「表示条件」を「タクソノミーターム」に設定しているか確認してください。

タームIDとカテゴリIDを混同している

WordPressにはタームIDとは別にカテゴリIDが存在しますが、ACFで使うのはtag_ID(タームID)のほうです。URLの tag_ID=●● の数値を使用してください。

まとめ

ACFでタームに追加したカスタムフィールドを出力するには the_field('フィールド名', 'タクソノミー名_タームID') の形式で第二引数を指定します。アーカイブページでは get_queried_object() を使って動的に取得すると使い回しが効いて便利です。エリア情報・カテゴリ説明など、タームごとに情報を管理したい場合にぜひ活用してみてください。

ご不明な点やコーディングのご依頼はお問い合わせからお気軽にどうぞ。

タイトルとURLをコピーしました