Home › Forums › Front-end Issues › How to count the get_row_layout?
Hi,
How can i count the get_row_layout that are inside a flexible content field and output that value in a class like:
<?php
if( have_rows('boxes') ):
while ( have_rows('boxes') ) : the_row();
if( get_row_layout() == 'text' ):
?>
<div class="box field-class-01">
<?php the_sub_field('content'); ?>
</div>
<?php elseif( get_row_layout() == 'image' ): ?>
<div class="box field-class-02">
<?php the_sub_field('content'); ?>
</div>
<?php elseif( get_row_layout() == 'photo_slider' ): ?>
<div class="box field-class-03">
<?php the_sub_field('content'); ?>
</div>
<?php endif; endwhile; else : endif; ?>
And that in the frontend every box will have his own class upcounting.
I think the get_row_index()
function will do the work
<?php
if( have_rows('boxes') ):
while ( have_rows('boxes') ) : the_row();
if( get_row_layout() == 'text' ):
?>
<div class="box field-class-<?php echo get_row_index(); ?>">
<?php the_sub_field('content'); ?>
</div>
<?php elseif( get_row_layout() == 'image' ): ?>
<div class="box field-class-<?php echo get_row_index(); ?>">
<?php the_sub_field('content'); ?>
</div>
<?php elseif( get_row_layout() == 'photo_slider' ): ?>
<div class="box field-class-<?php echo get_row_index(); ?>">
<?php the_sub_field('content'); ?>
</div>
<?php endif; endwhile; else : endif; ?>
Hi Thomas,
That is sadly not working. If i have 2 columns next to each other then i get the same values in both columns like:
field-class-1 —– field-class-1
field-class-2 —– field-class-2
field-class-3 —– field-class-3
And not like:
field-class-1 —– field-class-4
field-class-2 —– field-class-5
field-class-3 —– field-class-6
It seems that you loop the rows two times. If so save the last row_index in a variable and add this var to the row_index in the second loop.
It should look like this:
<?php
if( have_rows('boxes') ):
while ( have_rows('boxes') ) : the_row();
if( get_row_layout() == 'text' ): ?>
<div class="box field-class-<?php echo get_row_index(); ?>">
<?php the_sub_field('content'); ?>
</div>
<?php elseif( get_row_layout() == 'image' ): ?>
<div class="box field-class-<?php echo get_row_index(); ?>">
<?php the_sub_field('content'); ?>
</div>
<?php elseif( get_row_layout() == 'photo_slider' ): ?>
<div class="box field-class-<?php echo get_row_index(); ?>">
<?php the_sub_field('content'); ?>
</div>
<?php // on the last get_row_layout()
$r = get_row_index(); ?>
<?php endif; endwhile; else : endif; ?>
<?php // start the second loop
if( have_rows('boxes') ):
while ( have_rows('boxes') ) : the_row();
if( get_row_layout() == 'text' ):
$r = $r + get_row_index(); ?>
<div class="box field-class-<?php echo $r; ?>">
<?php the_sub_field('content'); ?>
</div>
<?php elseif( get_row_layout() == 'image' ):
$r = $r + get_row_index(); ?>
<div class="box field-class-<?php echo $r; ?>">
<?php the_sub_field('content'); ?>
</div>
<?php elseif( get_row_layout() == 'photo_slider' ):
$r = $r + get_row_index(); ?>
<div class="box field-class-<?php echo $r; ?>">
<?php the_sub_field('content'); ?>
</div>
<?php endif; endwhile; else : endif; ?>
Hi Thomas,
It is working but when i am make more columns with the builder (like a new row with a 1 column layout) then i get again a same value on that box.
How can i make it so every box in every get_row_layout on the page get a unique number?
You must be logged in to reply to this topic.
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
🚨 The 2023 ACF Annual Survey closes tomorrow! This is your last chance to complete the survey and help guide the evolution of ACF. https://t.co/0cgr9ZFOJ5
— Advanced Custom Fields (@wp_acf) May 18, 2023
© 2023 Advanced Custom Fields.
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Cookie Policy. If you continue to use this site, you consent to our use of cookies.