Описание
Эта функция устарела. Вместо неё используйте функцию have_rows().
Эта функция используется внутри цикла while для перебора каждой строки поля Repeater или Flexible Content.
В отличие от have_rows(), эта функция при каждом вызове переходит к следующей доступной строке, что приводит к нежелательным результатам при её использовании также внутри условного оператора if.
Параметры
has_sub_field( $field_name, $post_id );
$field_name(string) (обязательный) Имя получаемого поля Repeater или Flexible Content. Например: ‘gallery_images’$post_id(mixed) (необязательный) ID записи, в которой сохранено значение. По умолчанию используется текущая запись.
Возвращаемое значение
(bool) True, если строка существует.
Журнал изменений
- Устарела в версии 4.3.0
Примеры
Перебор поля Repeater
В этом примере показано, как перебрать поле Repeater с именем “gallery_images”.
<?php if( get_field('gallery_images') ): ?>
<?php while( has_sub_field('gallery_images') ): ?>
<img src="<?php the_sub_field('image'); ?>" alt="<?php the_sub_field('alt'); ?>" />
<?php endwhile; ?>
<?php endif;
Перебор поля Flexible Content
В этом примере показано, как перебрать поле Flexible Content с именем “content” и вывести различные макеты.
<?php while( has_sub_field("content") ): ?>
<?php if( get_row_layout() == "paragraph" ): ?>
<div>
<?php the_sub_field("content"); ?>
</div>
<?php elseif( get_row_layout() == "file" ): ?>
<div>
<a href="<?php the_sub_field("file"); ?>" ><?php the_sub_field("name"); ?></a>
</div>
<?php elseif( get_row_layout() == "featured_posts" ): ?>
<div>
<h2><?php the_sub_field("title"); ?></h2>
<?php the_sub_field("content"); ?>
<?php if( get_sub_field("posts") ): ?>
<ul>
<?php foreach( get_sub_field("posts") as $p ): ?>
<li><a href="<?php echo get_permalink($p->ID); ?>"><?php echo get_the_title($p->ID); ?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
<?php endif; ?>
<?php endwhile; ?>
Перебор вложенных полей Repeater
В этом примере показано, как перебрать вложенные поля Repeater и вывести данные подполей.
<?php if( get_field('parent_repeater') ): ?>
<?php while( has_sub_field('parent_repeater') ): ?>
<div>
<?php if( get_sub_field('child_repeater') ): ?>
<ul>
<?php while( has_sub_field('child_repeater') ): ?>
<li><?php the_sub_field('item'); ?></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
</div>
<?php endwhile; ?>
<?php endif;
Перебор вложенных полей Repeater из другой записи
В этом примере показано, как перебрать вложенные поля Repeater из другой записи с ID 123.
Примечание: Для функций подполей не нужно указывать $post_id.
<?php if( get_field('parent_repeater', 123) ): ?>
<?php while( has_sub_field('parent_repeater', 123) ): ?>
<div>
<?php
if( get_sub_field('child_repeater') ): ?>
<ul>
<?php while( has_sub_field('child_repeater') ): ?>
<li><?php the_sub_field('item'); ?></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
</div>
<?php endwhile; ?>
<?php endif;
Обновлено: 30.09.2026