Search code examples
phpwordpressforeachadvanced-custom-fields

ACF repeater while loop + foreach


I'm trying to cover my basic PHP knowledge and I've stucked a bit. I'm trying to connect my this code:

if( have_rows('sales') ):
                while( have_rows('sales') ) : the_row();

                $dataPlatform = get_sub_field('platform');

                endwhile;
endif;

Which is supposed to get all the product platforms from the ACF repeater field (number of values will vary from 1 to approx 5). And add it to this foreach loop:

global $post;

            $terms = get_the_category( $post->ID, 'category' );

            foreach($terms as $term) {
                echo '<div class="col-lg-3 col-md-6 col-xs-12 game-single" data-type="'.$term->slug.'" data-platform="">';
            }

Obviously I've tried the easiest approach like the below one:

global $post;

            $terms = get_the_category( $post->ID, 'category' );
            
            if( have_rows('sales') ):
                while( have_rows('sales') ) : the_row();

                $dataPlatform = get_sub_field('platform');

                foreach($terms as $term) {
                    echo '<div class="col-lg-3 col-md-6 col-xs-12 game-single" data-type="'.$term->slug.'" data-platform="'. $dataPlatform .'">';
                }
    

                endwhile;
            endif;  

But it doesn't work as I planned. In theory I wanted to have data attribute called data-platform be filled like data-platform="value1 value2.." but my current code breaks the entire design because it duplicates the entire div with the certain values, and nest them.

What I'm doing wrong?


Solution

  • This would make you some divs without closing them. What is the value of $dataPlatform? Also you should be escaping what you echo using esc_attr or esc_html.

    foreach($terms as $term) {
      echo '<div class="col-lg-3 col-md-6 col-xs-12 game-single" data-type="'.$term->slug.'" data-platform="'. $dataPlatform .'">';
    }
    

    Update: Maybe this?

    global $post;
    
    $terms = get_the_category( $post->ID, 'category' );
    $dataPlatform = "";
    
    if( have_rows('sales') ):
        while( have_rows('sales') ) : the_row();
       
          $dataPlatform .= get_sub_field('platform') . " ";
    
        endwhile;
        
        foreach($terms as $term) {
            echo '<div class="col-lg-3 col-md-6 col-xs-12 game-single" data-type="'.$term->slug.'" data-platform="'. $dataPlatform .'">';
        }    
    endif;