Гибкое содержание (Flexible Content)

Обзор

Поле «Гибкое содержание» представляет собой пустой контейнер, в который вы можете добавить неограниченное количество макетов с содержимым. Каждый макет может содержать 1 или более вспомогательных полей, позволяющих создавать простые или сложные макеты с контентом. И все это очень легко настроить и использовать!

Демо

Настройки

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

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

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

Базовый цикл

В этом примере показано, как перебирать и отображать данные с помощью функций have_rows, the_row и the_sub_field.

<?php

// проверяем есть ли данные в гибком содержании
if( have_rows('flexible_content_field_name') ):

     // перебираем данные
    while ( have_rows('flexible_content_field_name') ) : the_row();

        if( get_row_layout() == 'paragraph' ):

        	the_sub_field('text');

        elseif( get_row_layout() == 'download' ): 

        	$file = get_sub_field('file');

        endif;

    endwhile;

else :

    // макетов не найдено

endif;

?>

Вложенный цикл

В этом примере показано, как вы можете перебирать вложенное поле повторителя («images») внутри гибкого содержания.

<?php

// проверяем есть ли данные в гибком содержании
if( have_rows('flexible_content_field_name') ):

 	// перебираем макеты гибкого содержания
    while ( have_rows('flexible_content_field_name') ) : the_row();

		// проверяем на нужный макет
        if( get_row_layout() == 'gallery' ):

        	// проверяем есть ли данные в повторителе
        	if( have_rows('images') ):

			 	echo '<ul>';

			 	// перебираем строки повторителя
			    while ( have_rows('images') ) : the_row();

					$image = get_sub_field('image');

					echo '<li><img src="' . $image['url'] . '" alt="' . $image['alt'] . '" /></li>';

				endwhile;

				echo '</ul>';

			endif;

        endif;

    endwhile;

else :

    // макетов не найдено

endif;

?>

Базовый цикл (до версии 4.3.0)

Функции have_rows и the_row были добавлены в v4.3.0. До этого, для циклического перебора значений, использовалась функция has_sub_field. Ее основное отличие в том, что вы не можете использовать ее в операторе if.

<?php

// проверяем есть ли данные в гибком содержании
if( get_field('flexible_content_field_name') ):

 	// перебираем макеты гибкого содержания
    while ( has_sub_field('flexible_content_field_name') ) :

		 if( get_row_layout() == 'paragraph' ):

        	the_sub_field('text');

        elseif( get_row_layout() == 'download' ): 

        	$file = get_sub_field('file');

        endif;

    endwhile;

else :

    // макетов не найдено

endif;

?>