ACFの子グループの値を取得して表示する方法

ACF(Advabced Custom Fields)のGroupを使うと、入力画面も見やすくなりますので項目が多い場合は特にクライアントワークでよく利用します。

しかし項目が増えた場合にGroupをさらに入れ子にして使いたい場合が出てきます。つまりグループの中のグループ、言い換えれば子グループの中のフィールドってことです。


子グループの値を取得するおまじない

ごめんない。解説できませんが、まずとにかくこれを貼る。

if ( function_exists( 'get_field' ) ) {
    function get_group_field( string $group, string $field, $post_id = 0 ) {
        $group_data = get_field( $group, $post_id );
        if ( is_array( $group_data ) && array_key_exists( $field, $group_data ) ) {
            return $group_data[ $field ];
        }
        return null;
    }
}

これはACF公式のサポートページで、ユーザーのlevicole404さんが示しているやり方です。

How to get field data from a group inside a group

これであとは簡単に指定した子グループの中のフィールドを表示できるようになります。


表示する方法

実際に表示するには、テーマファイルに以下のように書きます。

<?php echo get_group_field( '親グループフィールド名', '子グループフィールド名')['子グループの中のフィールド名']; ?>

おまじないと合わせて書いた例は以下のようになります。

<?php
if ( function_exists( 'get_field' ) ) {
  function get_group_field( string $group, string $field, $post_id = 0 ) {
    $group_data = get_field( $group, $post_id );
    if ( is_array( $group_data ) && array_key_exists( $field, $group_data ) ) {
      return $group_data[ $field ];
    }
    return null;
  }
}
?>
<ul>
  <li><?php echo get_group_field( '親グループフィールド名', '子グループフィールド名')['子グループの中のフィールド名01']; ?></li>
  <li><?php echo get_group_field( '親グループフィールド名', '子グループフィールド名')['子グループの中のフィールド名02']; ?></li>
  <li><?php echo get_group_field( '親グループフィールド名', '子グループフィールド名')['子グループの中のフィールド名03']; ?></li>
</ul>

リピーターフィールドとか使えば悩まずに済みそうですが、有料版は使えない!という場合に役立つかもです。

 

 

制作者近影

制作者 : 樋口 美徳(ひぐち みのり)
Webデザイナー・グラフィックデザイナー・イラストレーター
美大卒業後インターネット黎明期に独学でWebサイト制作を学び、1999年より日本の会社でデザイナーとして2008年まで勤務。勤務中2007年にドイツ・ベルリンへ移住し、以後フリーランスとして働いています。
夫と長女(大学生)、長男(高専生)の日本人4人家族でドイツ生活絶賛サバイバル中です。

制作者の紹介へ制作実績へお問い合わせ