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さんが示しているやり方です。
これであとは簡単に指定した子グループの中のフィールドを表示できるようになります。
表示する方法
実際に表示するには、テーマファイルに以下のように書きます。
<?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>
リピーターフィールドとか使えば悩まずに済みそうですが、有料版は使えない!という場合に役立つかもです。