Support

Account

Home Forums Add-ons Repeater Field Problema withe repeater item

Solved

Problema withe repeater item

  • I have a code that kinda works. It gets the repeater and shows everything from the article that I need.

    The problem is that it’s not looping trouhg the repeater ‘bloco’ it only runs it once.

    Here is the code:

    http://pastebin.com/Uy9HdP3C

  • I’ve pared down your code to the important bits to explain where the problem is. Hope it helps

    
    <?php
      // there is already a query running, the main query
      
      // this is a nested secondary query
      $the_query = new WP_Query(array(
          // .. your query here
      ));
      while( $the_query->have_posts() ) : $the_query->the_post();
        // .. do some stuff
        if( have_rows('bloco') ): 
          while ( have_rows('bloco') ) : 
            the_row();
            $post_objects = get_sub_field('artigos');
            if( $post_objects ): 
            
              // temporarily hold the post from your secondary query
              // see comment below about problem doing wp_reset_postdata();
              $temp_post = $post;
              
              foreach( $post_objects as $post): 
                setup_postdata($post); 
                // ... do some stuff
              endforeach;
              
              // you should do a wp_reset_postdata() here
              // however, if you do that you will reset post data
              // to the main query and not your secondary nested query
              // so get the value we stored above here
              $post = $temp_post;
              
            endif; //if( $post_objects ): foreach( $post_objects as $post): setup_postdata($post);
          endwhile;
        endif; //<?php if( have_rows('bloco') ): while ( have_rows('bloco') ) : the_row();
      endwhile; // end of the secondary query loop
      
      // this resets post data to main query
      wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly
    ?>
    
  • Thnx a lot dude, it worked like a charm.

    • fgenois

    • December 26, 2018 at 10:49 am

    Hello.

    I working on a similar problem for some hours now, I just can’t find the solution.
    I tried the code above, only the first repeater element is displayed, followed by weird posts, I dont even know where they came from.

    Here’s my code :
    // main query
    <?php $args = array (‘post_type’ => ‘newslettre’, ‘order’ => ‘DESC’,’posts_per_page’ => ‘1’, );
    $my_query= new WP_Query( $args );
    while ( $my_query->have_posts() ) : $my_query->the_post();

    // repeater
    if( have_rows(‘articles’) ):
    while ( have_rows(‘articles’) ) : the_row();
    $post_object = get_sub_field(‘choisir_un_article’);
    if( $post_object ):
    $temp_post = $post;

    foreach( $post_object as $post):
    setup_postdata($post);
    ?>

    // … do some stuff

    <?php endforeach;
    $post = $temp_post; ?>
    <?php endif; ?>
    <?php endwhile; ?>
    <?php endif; ?>

    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?>

    Your hekl would be very appreciated !!!

    Thank you

  • @hube2 Thank you but it does not work for me :/

    I try other loop but I have juste 1 post in Front

    An idea ?

    Thank you so much

    <?php $query = new WP_Query( array( 'post_type' => 'nosmarques' ) );                
    if ( $query->have_posts() ) : ?>
    	<?php while ( $query->have_posts() ) : $query->the_post(); ?>   
    		<div id="popup<?php the_ID(); ?>" class="popup_block">
    			<div class="center">
    				<?php the_post_thumbnail(); ?>
    				<span class="h1 dispo"><?php _e( 'Disponibilit├ęs', 'territoiredhomme' ); ?></span>
    			</div>
    			<?php if( have_rows('brand_in_shop') ): ?>
    				<ul class="shop-brand globe">
    					<?php while ( have_rows('brand_in_shop') ) : the_row(); ?>   
    						<li class="inline-block">
    						    <?php $post_object = get_sub_field('shop_sales'); ?>
    						    <?php if( $post_object ): ?>
    						 		<?php $post = $post_object; setup_postdata( $post ); ?>
    						 			<a class="uppercase" href="territoiredhomme/nos-boutiques/">
    						                <?php the_title(); ?>
    						            </a>
    						        <?php wp_reset_postdata(); ?>
    						    <?php endif; ?>
    						</li>	 
    					<?php endwhile; ?>	 
    				</ul>
    			<?php endif; ?>		 
    		</div>	
    	<?php endwhile; wp_reset_postdata(); ?>
    	<!-- show pagination here -->
    	<?php else : ?>
    	<!-- show 404 error here -->
    <?php endif; ?>
  • The problem is as I have explained in other places on these forums, and above. You cannot use a nested loop that includes setup_postdata() and wp_reset_postdata(). wp_reset_postdata() ALWAYS resets post data to the main query. In you example there is the “Main WP Query”, then you do a custom query, then you get a post from a field. The last is the 3rd nesting. Calling wp_reset_postdata() here is what is causing the problem. You must interact with this post in another way, for example

    
    <li class="inline-block">
      <?php 
        $post_object = get_sub_field('shop_sales');
        if ($post_object) {
          ?>
            <a class="uppercase" href="territoiredhomme/nos-boutiques/">
              <?php echo get_the_title($post_object->ID); ?>
            </a>
          <?php 
        }
      ?>
    </li>
    
  • It’s ok !
    Thank you for your answer !

    I have understant for the setup_postdata() and wp_reset_postdata().

    have a good day !

Viewing 7 posts - 1 through 7 (of 7 total)

You must be logged in to reply to this topic.

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.