Как в WordPress отобразить кастомное поле «повторитель» ACF

Чтобы правильно отобразить кастомные поля «повторитель» (Repeater Field) в Advanced Custom Fields (ACF), нужно использовать специальные функции ACF для работы с этими полями.

🔹 Основной синтаксис для вывода повторителя

PHP
<?php if (have_rows('название_повторителя')) : ?>
    <?php while (have_rows('название_повторителя')) : the_row(); ?>
        <?php 
        // Получаем значения подполей
        $subfield_value = get_sub_field('название_подполя');
        ?>
        <div>
            <?php echo $subfield_value; ?>
        </div>
    <?php endwhile; ?>
<?php endif; ?>

🔹 Пример с реальными данными

Допустим, у вас есть Repeater Field с названием team_members, и внутри него подполя:

  • name (текст)
  • position (текст)
  • photo (изображение)

Код для вывода всех записей повторителя:

PHP
<?php if (have_rows('team_members')) : ?>
    <div class="team-list">
        <?php while (have_rows('team_members')) : the_row(); ?>
            <?php 
            $name = get_sub_field('name');
            $position = get_sub_field('position');
            $photo = get_sub_field('photo');
            ?>
            <div class="team-member">
                <img src="<?php echo esc_url($photo['url']); ?>" alt="<?php echo esc_attr($name); ?>">
                <h3><?php echo esc_html($name); ?></h3>
                <p><?php echo esc_html($position); ?></p>
            </div>
        <?php endwhile; ?>
    </div>
<?php else : ?>
    <p>Нет данных для отображения.</p>
<?php endif; ?>

🔹 Дополнительные варианты

1. Получить данные повторителя в виде массива

Если нужно работать с данными как с массивом:

PHP
$repeater = get_field('team_members');
if ($repeater) {
    foreach ($repeater as $row) {
        echo $row['name'];
        echo $row['position'];
        echo $row['photo']['url'];
    }
}

2. Проверка на пустое поле

PHP
if (have_rows('team_members')) {
    // Есть данные
} else {
    // Пусто
}

3. Получить количество элементов в повторителе

PHP
$count = count(get_field('team_members'));
echo "Всего элементов: " . $count;

🔹 Важные моменты

Экранирование данных – используйте esc_html(), esc_url() для безопасности.
Проверка на пустоту – всегда проверяйте if (have_rows()).
Изображения – если подполе photo это изображение, оно возвращается как массив (url, alt, title).

🔹 Вывод

Для работы с ACF Repeater Field используйте:

  • have_rows() + the_row() + get_sub_field() – для пошагового вывода.
  • get_field('repeater') – если нужен массив всех данных.

Если что-то не работает, проверьте:

  1. Правильно ли указано название повторителя.
  2. Заполнены ли данные в админке.
  3. Подключен ли ACF в теме (если код в файле, а не через админку).

Можно также использовать var_dump(get_field('team_members')); для отладки. 🚀