Повторитель (Repeater)

Обзор

Поле «Повторитель» позволяет создать набор вложенных полей, которые можно повторять снова и снова во время редактирования содержимого!

Любой тип поля может быть добавлен к повторителю. Он позволяет легко создавать и управлять повторяющимися данными!

Демо

Настройки

ИмяОписание
Вложенные поляУстанавливает вложенные поля, которые будут отображаться как ячейки в таблице повторителя.
Сокращенный заголовокВыберите поле, которое будет отображаться в качестве заголовка при сворачивании блока
Мин. количество элементовУстанавливает какое минимальное количество строк обязательно создать перед сохранением.
Макс. количество элементовУстанавливает лимит на максимальное количество строк.
БлокИзменяет стиль макета. Макет»таблица» выглядит как стандартная таблица со строками и столбцами. Макет «строка» не будет использовать столбцы, вместо этого все вложенные поля будут друг под другом (полезно, когда у вас много подполей). Макет «блок» похож на строку с тем лишь различием, что название поля будет слева от самого поля.
Текст кнопки добавленияПозволяет изменить текст для кнопки добавления новой строки.

Использование в шаблоне

Повторитель — это обертка для группы подполей, поэтому для перебора данных и получения значений подполей вы должны использовать несколько дополнительных функций. Они описаны ниже:

Базовый цикл

В этом примере показано, как перебирать и отображать данные с помощью функций 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"       // значение вложенного поля

Похожие