I have a small problem with an inlined PHP code for displaying 2 different divs. One of them has an if condition for a advanced control – repeater, and the other is a while loop for posts. When the if condition div is first, and then the while loop follow both are displayed. However, if i swap their place and put the while div on top the 2nd div (the if condition one) disappears, it’s has_rows is somehow false: Here are the 2:
1. The If – div
<div id="next"></div>
<?php if( have_rows('products_grid') ):
if( get_field('product_grid_header') ){
$data = ['header' => get_field('product_grid_header'), 'img' => 'rectangle-proizvodi.png', 'url' => get_field('product_header_url')];
include(locate_template('templates/elements/devider.php'));
}?>
<div class="products-grid white">
<div class="container sweet-products-container">
<div class="row">
<div class="col-md-12">
<div class="row nomargin">
<?php while ( have_rows('products_grid') ) : the_row();
include(locate_template('templates/elements/products-grid-item.php'));
endwhile; ?>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
2. The while loop – div
<div class="news product-news homepage">
<div class="container">
<div class="row">
<div class="col-sm-12">
<div class="owl-carousel products owl-theme">
<?php
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => '5',
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array ('top-vesti')
)
)
);
$my_query = new WP_Query( $args );?>
<?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
<article class="item">
<div class="row">
<div class="col-sm-12">
<?php if ( has_post_thumbnail() ) : ?>
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
<?php the_post_thumbnail('medium'); ?>
</a>
<?php endif; ?>
<div class="post-info">
<a href="<?php the_permalink(); ?>"><h4><?php the_title(); ?></h4></a>
<div class="article-excerpt">
<?php the_excerpt(); ?>
<a class="read-more" href="<?php the_permalink() ?>"><?php pll_e( 'Повеќе' ); ?></a>
</div>
</div>
</div>
</div>
</article>
<?php endwhile; ?>
</div>
</div>
</div>
</div>
</div>
So if the order is like this IF then while, both are shown. But, if i swap them and put the while one first, the if one is not shown. Is there anything in the while loop that could cause has_row for the repeater to not have rows? Any suggestions are appreciated.
If the while over the posts is first, at the end WP has the last post of your loop in the global $post variable. You need to https://developer.wordpress.org/reference/functions/wp_reset_postdata/
I tried adding
<?php endwhile; $my_query->reset_postdata(); ?>
but this didn’t help. I’m not very familiar with WP, but maybe i should try
<?php endwhile; wp_reset_postdata(); ?>
instead. Please correct me if i’m doing something wrong 🙂
The topic ‘Repeater has_rows is false after a while loop’ is closed to new replies.
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!
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 Privacy Policy. If you continue to use this site, you consent to our use of cookies.