ノーマルに繰り返すフィールドを出力する方法、
繰り返しフィールドの中に繰り返しフィールドがある場合の出力方法、
と、3回目となります今回は「グループ」の中にある繰り返しフィールドの出力方法になります。
更新するユーザーが使いやすいようにまとめておくために使うことが多い「グループ」フィールド。
グループフィールドの中にあるサブフィールドと、サブフィールドのひとつに繰り返しフィールドがあった場合の出力方法を備忘録として残しておきます。
ACFのグループフィールド内のサブフィールドを出力する方法
さっそく結論となるコードから
<?php
$group = get_field('group');
$group_ttl = $group['group_ttl'];
$group_repeat_fields = $group['group_repeat_fields'];
if ($group_repeat_field) :
?>
<dl>
<dt><?php echo esc_html( wp_strip_all_tags( $group_ttl )); ?></dt>
<dd>
<ul>
<?php
foreach ($group_repeat_fields as $group_repeat_field) : // ⇒ foreachでループ処理を行う
$repeat_field_img = $group_repeat_field['repeat_field_img']
?>
<li class="<?php if (empty($repeat_field_img)) :?>is-no-img<?php endif; ?>">
<?php
if (!empty($repeat_field_img)) :
$alt = esc_html( wp_strip_all_tags( $repeat_field_img['alt'] ));
?>
<div>
<img src="<?php echo esc_url($repeat_field_img['url']); ?>" alt="<?php if(!empty($alt)){ echo $alt; }else{ echo esc_html( wp_strip_all_tags($group_repeat_field['repeat_field_ttl'])); };?>">
</div>
<?php endif; ?>
<div>
<h2><?php echo esc_html( wp_strip_all_tags($group_repeat_field['repeat_field_ttl'])); ?></h2>
<p><?php echo nl2br(esc_textarea(($group_repeat_field['repeat_field_txt']))); ?></p>
</div>
</li>
<?php endforeach; ?>
</ul>
</dd>
</dl>
<?php endif; ?>
それでは解説。
グループのフィールド名は group サブフィールドにグループのタイトル(group_ttl)と繰り返し(group_repeat_fields)があります。それぞれを$group[‘group_ttl’]、$group[‘group_repeat_fields’]で取り出して、それぞれの変数に入れています。
繰り返しに何かしろ入れている場合に表示いう条件(5行目)で、8行目にグループのタイトル、11行目〜繰り返しフィールドを表示する記述になります。
繰り返しフィールドの中には、画像(repeat_field_img)、見出し(repeat_field_ttl)、テキスト(repeat_field_txt)があります。
<li>には画像が入っている場合と入っていない場合でデザイン調整したいので、画像が設定されない場合にはクラス名 is-no-img が入るようにしています。
また、21行目画像のalt属性にも条件分岐でalt属性が入力されている画像かどうかで分岐してテキストが入るようにしています。
なんとなくでもわかっていただけたでしょうか。
ついでに画像を入れたときの記述のサンプルも残しておきました。
テキスト、テキストボックス、画像このあたりはよく使うことになるので、エスケープ処理した出力の仕方も一緒に見ていただければ。