【WordPress】グループまたは繰り返しフィールドの中の繰り返しフィールドを出力する方法

本日は「Advanced Custom Fields」の繰り返しフィールドに関する記事です。

繰り返しフィールドの基本的な導入方法については、過去にお話しをしましたので参考に。

参考記事:【WordPress】ACFのアドオン「繰り返しフィールド」の導入から出力まで!

今回はその応用編。
「Advanced Custom Fields」でグループフィールドの中に繰り返しフィールドを作成した場合や、繰り返しフィールドの中に繰り返しフィールドを作成した場合の出力方法についてご紹介します。

グループの中に繰り返しフィールドがある場合の出力方法

<!-- Repeater fileld in group -->
<?php
//グループの中に入っている繰り返しフィールドを変数に代入する
$fields = (get_field('group')['repeat']); ?>
<?php
if ($fields) : // ⇒ $fields = (get_field('group')['repeat'])が存在するとき
    foreach ($fields as $field) : // ⇒ foreachでループ処理を行う
?>
        <!--繰り返しフィールドの内容-->
        <section>
            <h2><?php echo esc_url($field['title']); ?></h2>
            <p>
                <?php echo esc_url($field['content']); ?>
            </p>
        </section>
<?php
    endforeach;
endif;
?>

さらに繰り返しフィールドの中に繰り返しフィールドを出力させたい場合

<!-- Repeater fileld in repeater fileld -->
<?php $fields = (get_field('group')['repeat']); ?>
<?php if ($fields) : //繰り返しフィールド名「repeat」のループ
    foreach ($fields  as $field) : ?>
        <h2><?php echo esc_html($fields['title']); ?></h2>
        <?php
        $fields = ($field['repeatInner']);
        if ($fields) : //繰り返しフィールド名「repeatInner」
            foreach ((array)$fields as $field) : ?>
                <p><?php echo esc_html($field['content']); ?></p>
                <!--*** ↓↓ さらに繰り返しフィールドを入れ子にしたい場合は同様に記述を繰り返す ↓↓ ***-->
                <?php
                $filelds = ($field['繰り返しフィールド名']);
                if ($fields) :
                    foreach ((array)$fields as $field) : ?>
                        <!--内容-->
                <?php
                    endforeach;
                endif; ?>
                <!--*** ↑↑ さらに繰り返しフィールドを入れ子にしたい場合は同様に記述を繰り返す ↑↑ ***-->
        <?php
            endforeach;
        endif;
        ?>
<?php
    endforeach;
endif;
?>

この記述方法なら、繰り返しフィールドの中に繰り返しフィールドの中に繰り返しフィールド…みたいな入力欄が発生したときも対応できます。

まとめ

通常の繰り返しフィールドの出力方法とは少々異なるため、初めての方は戸惑うかもと思い今回記事にしてみました。

グループ内の繰り返しフィールドを出力する際や、繰り返しフィールドの中に繰り返しフィールドが入れ子になっている際にどう出力するの!?とお悩みの方は、ぜひ今回の記事を参考にしてみてください。