Обзор
Поле «Повторитель» позволяет создать набор вложенных полей, которые можно повторять снова и снова во время редактирования содержимого!
Любой тип поля может быть добавлен к повторителю. Он позволяет легко создавать и управлять повторяющимися данными!
Демо
Настройки
Имя | Описание |
---|---|
Вложенные поля | Устанавливает вложенные поля, которые будут отображаться как ячейки в таблице повторителя. |
Сокращенный заголовок | Выберите поле, которое будет отображаться в качестве заголовка при сворачивании блока |
Мин. количество элементов | Устанавливает какое минимальное количество строк обязательно создать перед сохранением. |
Макс. количество элементов | Устанавливает лимит на максимальное количество строк. |
Блок | Изменяет стиль макета. Макет»таблица» выглядит как стандартная таблица со строками и столбцами. Макет «строка» не будет использовать столбцы, вместо этого все вложенные поля будут друг под другом (полезно, когда у вас много подполей). Макет «блок» похож на строку с тем лишь различием, что название поля будет слева от самого поля. |
Текст кнопки добавления | Позволяет изменить текст для кнопки добавления новой строки. |
Использование в шаблоне
Повторитель — это обертка для группы подполей, поэтому для перебора данных и получения значений подполей вы должны использовать несколько дополнительных функций. Они описаны ниже:
Базовый цикл
В этом примере показано, как перебирать и отображать данные с помощью функций have_rows, the_row и the_sub_field.
<?php
// проверяем есть ли в повторителе данные
if( have_rows('repeater_field_name') ):
// перебираем данные
while ( have_rows('repeater_field_name') ) : the_row();
// отображаем вложенные поля
the_sub_field('sub_field_name');
endwhile;
else :
// вложенных полей не найдено
endif;
?>
Продвинутый цикл
В этом примере будет использоваться функция get_sub_field для хранения переменных в цикле.
<?php if( have_rows('repeater_field_name') ): ?>
<ul class="slides">
<?php while( have_rows('repeater_field_name') ): the_row();
// переменные
$image = get_sub_field('image');
$content = get_sub_field('content');
$link = get_sub_field('link');
?>
<li class="slide">
<?php if( $link ): ?>
<a href="<?php echo $link; ?>">
<?php endif; ?>
<img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt'] ?>" />
<?php if( $link ): ?>
</a>
<?php endif; ?>
<?php echo $content; ?>
</li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
Базовый цикл (до версии 4.3.0)
Функции have_rows и the_row были добавлены в v4.3.0. До этого, для циклического перебора значений, использовалась функция has_sub_field. Ее основное отличие в том, что вы не можете использовать ее в операторе if.
<?php if(get_field('repeater_field_name')): ?>
<ul>
<?php while(has_sub_field('repeater_field_name')): ?>
<li>sub_field_1 = <?php the_sub_field('sub_field_1'); ?>, sub_field_2 = <?php the_sub_field('sub_field_2'); ?>, etc</li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
Базовый цикл (цикл PHP foreach)
В этом примере показано, как вы можете использовать функцию get_field для возвращения данных повторителя. Это полезно для получения данных конкретной строки.
<?php
$rows = get_field('repeater_field_name');
if($rows)
{
echo '<ul>';
foreach($rows as $row)
{
echo '<li>sub_field_1 = ' . $row['sub_field_1'] . ', sub_field_2 = ' . $row['sub_field_2'] .', etc</li>';
}
echo '</ul>';
}
Получение первой строки повторителя
В примере показано, как получить первую строку повторителя и вывести изображение которое содержится в его вложенном поле.
<?php
$rows = get_field('repeater_field_name' ); // получим все строки повторителя
$first_row = $rows[0]; // получим только первую строку
$first_row_image = $first_row['sub_field_name' ]; // получим значение вложенного поля
// Примечание
// $first_row_image = 123 (ID изображения)
$image = wp_get_attachment_image_src( $first_row_image, 'full' );
// url = $image[0];
// width = $image[1];
// height = $image[2];
?>
<img src="<?php echo $image[0]; ?>" />
Получение случайного строки повторителя
В примере показано, как получить случайную строку повторителя и вывести изображение которое содержится в его вложенном поле.
<?php
$rows = get_field('repeater_field_name' ); // получим все строки повторителя
$rand_row = $rows[ array_rand( $rows ) ]; // получим только первую строку
$rand_row_image = $rand_row['sub_field_name' ]; // получим значение вложенного поля
// Примечание
// $first_row_image = 123 (ID изображения)
$image = wp_get_attachment_image_src( $rand_row_image, 'full' );
// url = $image[0];
// width = $image[1];
// height = $image[2];
?>
<img src="<?php echo $image[0]; ?>" />
FAQ
Активация повторителя
Повторитель — платное дополнение и является частью ACF PRO. Его нет в бесплатной версии, распространяющейся через репозиторий WordPress. Для активации его возможностей купите ACF PRO.
Как сохраняются данные?
Поле «Повторитель» сохраняет свои данные в таблице wp_postmeta. Если поле повторителя называется «gallery» и содержит 2 вложенных поля, называемых «image» и «description», то структура базы данных будет состоять из 2 строк и выглядеть так:
// meta_key meta_value
gallery 2 // количество строк
gallery_0_image 6 // значение вложенного поля
gallery_0_description "some text" // значение вложенного поля
gallery_1_image 7 // значение вложенного поля
gallery_1_description "some text" // значение вложенного поля
Похожие
- Функции: have_rows()
- Устаревшие: has_sub_field()
- Функции: get_sub_field()
- Функции: the_sub_field()