У меня есть повторитель, который я хотел бы изменить в зависимости от того, сколько полей он выводит
код, который я имею для основного репитера:
<?php // REAPEATER FIELD
if(get_field('whatever')): ?>
<?php while(has_sub_field('whatever')): ?>
<div class="whatever_block">
<?php the_sub_field('anything'); ?>
</div>
<?php endwhile; ?>
<?php endif; ?>
Как я хочу, чтобы это выглядело:
<?php // REAPEATER FIELD
if(get_field('whatever')): ?>
<?php while(has_sub_field('whatever')): ?>
//if only one
<div class="col-sm-12">
<?php the_sub_field('anything'); ?>
</div>
//if only two
<div class="col-sm-6">
<?php the_sub_field('anything'); ?>
</div>
//if etc
//else
<div class="whatever_block">
<?php the_sub_field('anything'); ?>
</div>
<?php endwhile; ?>
<?php endif; ?>
Как я могу добиться вышеупомянутого вывода с помощью операторов if? Являются ли заявления даже правильный путь?
Хорошо, здесь используется функция count () для подсчета полей, а затем с помощью регистра переключателя устанавливается класс для вашего div, например:
<?php // REAPEATER FIELD
if(get_field('whatever')): ?>
<?php switch(count(get_field('whatever'))) : //checks total fields set
case '1':
$divClass = 'oneField';
break;
case '2':
$divClass = 'twoField';
break;
case '3':
$divClass = 'threeField';
break;
case '4':
$divClass = 'fourField';
break;
endswitch; ?>
<?php while(has_sub_field('whatever')): ?>
<div class="<?php echo $divClass; ?>">
<?php the_sub_field('anything'); ?>
</div>
<?php endwhile; ?>
<?php endif; ?>
Просто замените «oneField», «twoField», ect на нужные вам имена классов, и все должно быть установлено.
Вы можете сделать count
на повторителе, чтобы проверить, сколько подполей у него есть. Вот решение с использованием ACF v4.xx have_rows
синтаксис (тем не менее должен работать с get_field
также):
if( have_rows( 'parent_whatever' ) ) {
$posts_no = get_field( 'parent_whatever' );
while( have_rows( 'parent_whatever' ) {
the_row();
$class = "col-sm-" . 12/$posts_no;
echo '<div class="' . $class . '">';
the_sub_field( 'whatever' );
echo '</div>';
endwhile;
endif;