Обзор
Создавать и отображать вложенные поля Repeater / Flexible Content очень просто с помощью плагина Advanced Custom Fields. В этой статье мы покажем, как построить простой список дел, использующий вложенный repeater для вывода групп элементов.
Группа полей
Ниже приведен скриншот, показывающий группу полей, используемую для этого списка дел, а также правила расположения, определяющие, когда должна отображаться эта группа полей.
Данные
Ниже приведен скриншот страницы, на которой отображается эта группа полей. Как показано выше, в качестве правила расположения использовался шаблон страницы «Список дел», чтобы прикрепить группу полей к странице.
Шаблон
Теперь, когда мы создали группу полей и заполнили данные для нашего списка дел, мы можем пройтись по ним циклом и вывести данные в шаблоне. Это руководство предполагает, что файл шаблона для «Списка дел» уже существует, так что давайте отредактируем этот файл. В следующем коде мы будем использовать эти функции:
- have_rows() – позволяет нам перебирать доступные строки в поле repeater / flexible content
- get_sub_field() – возвращает значение подполя (из текущего repeater в “has_sub_field”)
- the_sub_field() – выводит значение подполя (из текущего repeater в “has_sub_field”)
<?php
/**
* Template Name: Список дел
*/
get_header(); ?>
<div id="primary">
<div id="content" role="main">
<?php while ( have_posts() ) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
<?php
// проверяем наличие строк (родительский repeater)
if( have_rows('to-do_lists') ): ?>
<div id="to-do-lists">
<?php
// перебираем строки (родительский repeater)
while( have_rows('to-do_lists') ): the_row(); ?>
<div>
<h3><?php the_sub_field('title'); ?></h3>
<?php
// проверяем наличие строк (подрепитер)
if( have_rows('items') ): ?>
<ul>
<?php
// перебираем строки (подрепитер)
while( have_rows('items') ): the_row();
// выводим каждый элемент как пункт списка — с классом completed (если он выполнен)
?>
<li <?php if( get_sub_field('completed') ){ echo 'class="completed"'; } ?>><?php the_sub_field('name'); ?></li>
<?php endwhile; ?>
</ul>
<?php endif; // если( get_sub_field('items') ): ?>
</div>
<?php endwhile; // while( has_sub_field('to-do_lists') ): ?>
</div>
<?php endif; // если( get_field('to-do_lists') ): ?>
<?php endwhile; // конец цикла. ?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>Ниже приведен скриншот, показывающий HTML, созданный на основе приведенного выше кода.
Вывод
Работать с вложенными повторителями просто, но иногда это может запутать. Чтобы упростить жизнь, старайтесь использовать простые имена полей. Помните, что подполям тоже можно давать те же имена, что и у родительских полей, так что нет необходимости придумывать длинные уникальные имена.
Обновлено: 01.06.2026


