【ACF】カテゴリやタグ、タクソノミーに紐づけたカスタムフィールドを取得して表示する

ACFのWP画面

Advanced Custom Fieldsを使うとWordPressのカスタマイズが簡単になる部分が多くあります。

基本的には、固定ページや投稿に入力欄や選択肢を増やす形のカスタマイズが多いのですが、カテゴリやタグと言ったタクソノミーに情報を追加することもよくあります。

その際普段通りの方法では情報を取得できないので、ちょっとだけ注意が必要です。

ACFを設定する

今回はテスト用に、カテゴリにサムネイルと説明文を追加して表示してみましょう。
まずがACFを設定します。

テストで作ってみた

単純なカテゴリ用のサムネイルと、説明文の入力欄を用意しました。
ルールの部分で、タクソノミー全てに適用されるようにしています。

設定情報を取得する

設定が終われば、あとはACFの入力情報を取得するだけです。
ACFの値を取得する関数get_fieldは以下のような仕様になっています。

get_field($selector, [$post_id], [$format_value]);

普段使う時は、第1引数のselectorだけ指定すれば良いのですが、カテゴリ等の場合は第2引数のidを指定します。

まずは、取得したタクソノミー情報を取得します。

$target_taxonomy = ’category_slug’; // 指定したいタクソノミーのスラッグを指定
$current_term_slug = get_query_var(’term’); // 現在のターム情報を取得

取得した情報を使って、タームのidを取得します。

$the_term = get_term_by(’slug’, $current_term_slug, $target_taxonomy); // ターム情報を取得
$term_id = $the_term->term_id;// タームIDを取得

最後に、タクソノミーとidをアンダースコアで繋ぎます。

$term_field_ids = $taxonomy.”_”.$term_id;

これで準備はOKです。
あとはget_fieldを使うだけ。取得したいカスタムフィールドと一緒に先ほどの変数を一緒に指定すれば完了です。

get_field(’tax_desp’, $term_field_ids);

全てつなげるとこんな感じになります。

$target_taxonomy = ’category_slug’; // 指定したいタクソノミーのスラッグを指定
$current_term_slug = get_query_var(’term’); // 現在のターム情報を取得
$the_term = get_term_by(’slug’, $current_term_slug, $target_taxonomy); // ターム情報を取得
$term_id = $the_term->term_id;// タームIDを取得
$term_field_ids = $taxonomy.”_”.$term_id;

get_field(’tax_desp’, $term_field_ids);

無事カテゴリやタグ等のタクソノミーに紐付けたカスタムフィールドを取得・表示することができました。