programing

ACF 리피터 출력의 총 행 수를 카운트하는 방법

i4 2023. 3. 2. 22:00
반응형

ACF 리피터 출력의 총 행 수를 카운트하는 방법

질문:ACF 리피터필드의 출력 행은 어떻게 카운트합니까?

목표: 행이 1개뿐일 때 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보다 작기 때문에 동작하지 않기 때문에 더 많은 행을 카운트해도 true가 반환됩니다.

감사해요!

그래, 드디어 답을 찾았어.

ACF 리피터의 합계 행을 카운트 하는 방법은 다음과 같습니다.

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

저는 작업입니다. 카운트는 if(have_rows('repeater_field') 앞에 배치해야 합니다.

리피터가 비어 있는 경우 경고 오류를 방지하기 위한 3진 연산자

"if(have_rows('repeater_field')" 뒤에 카운트를 배치하면 카운트는 FALSE를 반환합니다.

$repeater_field = get_sub_field('repeater_field');
// OR if repeater isn't a sub_field
// $repeater_field = get_field('repeater_field');

// ternary operator to avoid warning errors if no result
$count =  $repeater_field ? count($repeater_field) : FALSE;

if(have_rows('repeater_field')) : // OR if($count) :

    echo 'Number of posts:' . $count . '<br>';

    while(have_rows('repeater_field')) : the_row();
        echo get_sub_field('field_name') . '<br>';
    endwhile;
endif;

다음과 같이 행 수를 얻을 수 있습니다.

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

분명히 이것은get_the_ID()현재 게시물 ID를 가져오려면 이 ID를 수정해야 할 수 있습니다.

ACF는 리피터 필드명에 대한 리피터 카운트 값을 포스트메타 테이블에 meta_key로 저장합니다.

ACF는 카운트를 사용하여 올바른 리피터 서브필드 값을 가져옵니다.이 값은 다음 형식의 meta_keys에 대한 값으로 저장됩니다.$repeaterFieldname . '_' . $index . '_' . $subfieldName.

이게 도움이 되길...

이걸 한번 써보시는게 좋을거에요.

<?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>

고급 사용자 지정 필드에는 버전에 추가된 행을 카운트하는 기능이 내장되어 있습니다.5.3.4.

공식 매뉴얼: ACF | get_row_index()

사용할 수 있습니다.get_row_index();루프의 내부.

<?php if( have_rows('slides') ): ?>
    <?php while( have_rows('slides') ): the_row(); ?>
        <div class="accordion" id="accordion-<?php echo get_row_index(); ?>">
            <h3><?php the_sub_field('title'); ?></h3>
            <?php the_sub_field('text'); ?>
        </div>
    <?php endwhile; ?>
<?php endif; ?>

이 함수에서 반환되는 인덱스는 1부터 시작됩니다.즉, 데이터 행이 3개인 리피터필드는 1, 2, 3의 인덱스를 생성합니다.

값을 리셋하고 싶은 것 같습니다.$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;

이 코드는 정상적으로 동작하고 있습니다.

<?php if( have_rows('repeater_name') ):
$my_fields = get_field_object('repeater_name');
$count = (count($my_fields));
echo $count;
endif;?>

ACF 리피터 필드는 행을 저장하기 위해 배열을 사용합니다. 필드 행의 수를 얻는 가장 간단한 방법은 다음과 같습니다.

$count = sizeof(get_sub_field('field_name'));

언급URL : https://stackoverflow.com/questions/43788167/how-to-count-the-total-number-of-rows-in-a-acf-repeater-output

반응형