Описание
Поле Repeater — удобное решение для повторяющегося контента: слайдов, участников команды, CTA-плиток и других подобных элементов.
Этот тип поля выступает в роли родительского для набора подполей, которые можно повторять снова и снова. Универсальность — главная особенность этого типа поля. Внутри Repeater можно использовать поля любого типа, а количество повторений не ограничено (👨💻 если только оно не задано в настройках поля).
Скриншоты
Настройки
Sub Fields
Задаёт набор повторяемых подполей.Collapsed
Позволяет свернуть каждую строку, указав одно подполе для отображения.Minimum Rows
Задаёт минимальное количество обязательных строк данных.Maximum Rows
Задаёт максимальное количество допустимых строк данных.Layout
Определяет стиль отображения подполей.
Table: подполе отображаются в таблице. Названия будут показаны в заголовке таблицы.
Block: подполе отображаются блоками, одно за другим.
Row: подполе отображаются в таблице из двух столбцов. Названия будут показаны в первом столбце.Button Label
Текст, отображаемый на кнопке «Add Row».Pagination
Добавлено в ACF 6.0. Определяет, должно ли при редактировании Repeater в админ-панели загружаться только заданное количество строк на страницу. Если параметр отключён (по умолчанию он отключён), все строки будут загружены одновременно. Эта настройка не влияет на использование в шаблонах или результаты, возвращаемые через REST API. Примечание: в настоящее время эта настройка не поддерживается внутри Flexible Content и других полей Repeater. В таких случаях настройка не отображается.Rows per page
Добавлено в ACF 6.0. Задаёт количество строк, отображаемых на странице, если включена настройка «Pagination».
Использование в шаблонах
Поле Repeater возвращает массив строк, где каждая строка представляет собой массив, содержащий значения подполей.
Для удобства разработчиков мы создали дополнительные функции, специально предназначенные для перебора строк и доступа к значениям подполей. Это функции have_rows, the_row, get_sub_field и the_sub_field.
Базовый цикл
Этот пример показывает, как перебрать поле Repeater и загрузить значение подполя.
<?php
// Проверяем наличие строк.
if( have_rows('repeater_field_name') ):
// Перебираем строки.
while( have_rows('repeater_field_name') ) : the_row();
// Загружаем значение подполя.
$sub_value = get_sub_field('sub_field');
// Выполняем необходимые действия, но не забудьте экранировать значение при прямом выводе...
// Завершаем цикл.
endwhile;
// Значение отсутствует.
else :
// Выполняем необходимые действия...
endif;
Вывод слайдера
Этот пример показывает, как перебрать поле Repeater и сгенерировать HTML-код простого слайдера изображений.
<?php if( have_rows('slides') ): ?>
<ul class="slides">
<?php while( have_rows('slides') ): the_row();
$image = get_sub_field('image');
?>
<li>
<?php echo wp_get_attachment_image( $image, 'full' ); ?>
<p><?php echo acf_esc_html( get_sub_field('caption') ); ?></p>
</li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
Цикл foreach
Этот пример показывает, как вручную перебрать значение поля Repeater с помощью цикла foreach.
<?php
$rows = get_field('repeater_field_name');
if( $rows ) {
echo '<ul class="slides">';
foreach( $rows as $row ) {
$image = $row['image'];
echo '<li>';
echo wp_get_attachment_image( $image, 'full' );
echo wp_kses_post( wpautop( $row['caption'] ) );
echo '</li>';
}
echo '</ul>';
}
Вложенные циклы
Этот пример показывает, как перебрать вложенное поле Repeater и загрузить значение вложенного подполя.
<?php
/**
* Структура полей:
*
* - parent_repeater (Repeater)
* - parent_title (Text)
* - child_repeater (Repeater)
* - child_title (Text)
*/
if( have_rows('parent_repeater') ):
while( have_rows('parent_repeater') ) : the_row();
// Получаем значение родительского поля.
$parent_title = get_sub_field('parent_title');
// Перебираем строки вложенного Repeater.
if( have_rows('child_repeater') ):
while( have_rows('child_repeater') ) : the_row();
// Получаем значение вложенного поля.
$child_title = get_sub_field('child_title');
endwhile;
endif;
endwhile;
endif;
Получение значений первой строки
Этот пример показывает, как загрузить значение подполя из первой строки поля Repeater.
<?php
$rows = get_field('repeater_field_name' );
if( $rows ) {
$first_row = $rows[0];
$first_row_title = $first_row['title'];
// Выполняем необходимые действия...
}
Также можно использовать оператор break внутри цикла have_rows(), чтобы выйти из него в любой момент.
<?php
if( have_rows('repeater_field_name') ) {
while( have_rows('repeater_field_name') ) {
the_row();
$first_row_title = get_sub_field('title');
// Выполняем необходимые действия...
break;
}
}
Получение значений случайной строки
Этот пример показывает, как загрузить значение подполя из случайной строки поля Repeater.
<?php
$rows = get_field('repeater_field_name' );
if( $rows ) {
$index = array_rand( $rows );
$rand_row = $rows[ $index ];
$rand_row_title = $rand_row['title'];
// Выполняем необходимые действия...
}
Редактирование Repeater
Работать с полем Repeater достаточно просто: нажмите кнопку «Add Row», чтобы добавить новую строку, и отредактируйте отображаемые значения подполей.
Однако есть несколько советов и приёмов, которые значительно упрощают работу с Repeater.
Пагинация
Новая настройка «Pagination», представленная в ACF 6.0, помогает работать с большими Repeater, уменьшая количество строк, отображаемых одновременно. Это позволяет избежать сбоев браузера и ошибок PHP, которые могут возникать при загрузке или сохранении Repeater.
Однако есть несколько сценариев, в которых пагинация не поддерживается. Настройка пагинации не отображается для полей Repeater, расположенных внутри других полей Repeater или Flexible Content. Мы надеемся исправить это в одном из ближайших выпусков.
Пагинация не работает для форм во внешней части сайта — если настройка пагинации включена, Repeater будет работать как Repeater с отключённой пагинацией при просмотре во внешней форме. Однако при просмотре того же Repeater в админ-панели WordPress пагинация должна работать.
Кроме того, в настоящее время пагинация не работает внутри блоков ACF. В будущем это может измениться, но в блоках ACF пагинация не даст существенного прироста производительности из-за того, как блоки хранят все данные в содержимом записи и DOM.
Добавление, вставка и дублирование строк
Помимо добавления строк с помощью кнопки «Add Rows», можно вставить строку, наведя указатель на существующую строку и нажав значок «+» / «Add Row», который появляется в правой части строки:
Если перед нажатием на этот значок удерживать клавишу «Shift» на клавиатуре, он изменится на значок, позволяющий дублировать строку:
Вставленная строка появится над строкой, на которую ранее был наведён указатель. При дублировании новая строка появится под выбранной строкой с теми же значениями.
Если пагинация включена, для вставленных или дублированных строк номер строки не будет отображаться до сохранения изменений.
Изменение порядка строк
Порядок строк в Repeater можно изменять независимо от настройки «Pagination». Если пагинация отключена, наведите указатель на номер строки слева — появится значок перетаскивания.
Если пагинация включена, можно нажать на номер строки, чтобы открыть поле ввода номера. После ввода номера строки и сохранения страницы строка будет перемещена на новую позицию.
Обновлено: 30.09.2026





