Как подсчитать общее количество строк в выходе повторителя ACF

Вопрос: Как вы просто посчитаете строки в выводе поля повторителя ACF?

Цель: чтобы вывод выглядел по-другому с классом css, когда есть только одна строка, по сравнению с более чем одной строкой.

Мой код:

if( have_rows('testimonials')) {
$counter = 0;
$numtestimonials = '';

//loop thru the rows
while ( have_rows('testimonials') ){
the_row();
$counter++;
if ($counter < 2) {
$numtestimonials = 'onlyone';
}
echo '<div class="testimonial ' . $numtestimonials . '">';
// bunch of output here
echo '</div>';
}
}

Очевидно, что то, как я это делаю, не сработает < 2 в первый раз через строку, поэтому он возвращает истину, даже если после этого будет подсчитано больше строк.

Спасибо!

4

Решение

Хорошо, я наконец нашел ответ на это.

Способ подсчета общего количества строк в повторителе ACF:

$numrows = count( get_sub_field( 'field_name' ) );
15

Другие решения

Вы можете получить количество строк следующим образом:

$count = get_post_meta(get_the_ID(), 'testimonials', true);

Очевидно, что это использует get_the_ID() чтобы получить текущий идентификатор сообщения — возможно, вам придется изменить это.

ACF сохраняет значение счетчика повторителей для имени поля повторителя в качестве мета-ключа в таблице postmeta.

ACF использует счетчик для получения правильных значений подполя ретранслятора, которые сохраняются как значения для meta_keys в формате $repeaterFieldname . '_' . $index . '_' . $subfieldName,

Надеюсь это поможет…

0

Похоже, вы хотите сбросить значение в $numtestimonials,

Таким образом, код с исправлением будет:

$output = "";
$numtestimonials = "";

while ( have_rows('testimonials') ){
the_row();
$counter++;
$output .= "<span>" .$some_data. "</span>"; // bunch of output;
}

if($counter < 2){
$numtestimonials = "onlyone";
}
$output = "<div class='testimonail ".$numtestimonials." '>".$output
."</div>";
echo $output;
0

Работа с полем повторителя

ретранслятор может быть доступен через get_field или the_repeater_field / the_sub_field

<?php if( have_rows('repeater_field_name') ): ?>

<ul>

<?php while( have_rows('repeater_field_name') ): the_row(); ?>

<li>sub_field_1 = <?php the_sub_field('sub_field_1'); ?>, sub_field_2 = <?php the_sub_field('sub_field_2'); ?>, etc</li>

<?php

$sub_field_3 = get_sub_field('sub_field_3');

// do something with $sub_field_3

?>

<?php endwhile; ?>

</ul>

<?php endif; ?>

Случайно выбрать строку поля повторителя

<?php

$rows = get_field('repeater_field_name');
$row_count = count($rows);
$i = rand(0, $row_count - 1);

echo $rows[ $i ]['sub_field_name'];

?>

Получение значений с другой страницы

<?php

$other_page = 12;

?>
<p><?php the_field('field_name', $other_page); ?></p>
<?php

// get variable
$variable = get_field('field_name', $other_page);

// repeater field: note that the_sub_field and get_sub_field don't need a post id parameter
if( have_rows('repeater_field_name', $other_page) ): ?>

<ul>

<?php while( have_rows('repeater_field_name', $other_page) ): the_row(); ?>

<li>sub_field_1 = <?php the_sub_field('sub_field_1'); ?>, sub_field_2 = <?php the_sub_field('sub_field_2'); ?>, etc</li>

<?php

$sub_field_3 = get_sub_field('sub_field_3');

// do something with $sub_field_3

?>

<?php endwhile; ?>

</ul>

<?php endif; ?>

Запрос сообщений со значениями ACF

Пример поиска событий (тип записи), где местоположение (настраиваемое поле — выбор) равно Мельбурну (значение).
Много читать здесь: http://codex.wordpress.org/Template_Tags/get_posts.

<?php

$posts = get_posts(array(
'numberposts' => -1,
'post_type' => 'event',
'meta_key' => 'location',
'meta_value' => 'melbourne'
));

if($posts)
{
echo '<ul>';

foreach($posts as $post)
{
echo '<li><a href="' . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</a></li>';
}

echo '</ul>';
}

?>
0

Возможно, вы хотели попробовать это ..

<?php
$row = get_field('repeater', $post->ID);
if($row < 1) {
$rows = 0;
} else {
$rows = count($row);
} ?>
<p>Number of Row is (<?php echo $rows ; ?>)</p>
0

Вы можете попробовать этот код, он работает нормально:

<?php if( have_rows('repeater_name') ):
$my_fields = get_field_object('repeater_name');
$count = (count($my_fields));
echo $count;
endif;?>
-1
По вопросам рекламы [email protected]