Support

Account

Home Forums Add-ons Repeater Field Dynamic Repeater Fields with Titles

Solved

Dynamic Repeater Fields with Titles

  • So I have a repeater field for two separate pages. The idea is to cut down on code but so far I’m bloating all over the place!!

    It’s a list of sponsors, on one page its: partner, sponsor, in kind; and the other page: major and other.

    The fields are website, partner and image.

    What I’d like to be able to do is the following:

    Heading: Partner
    All fields marked as partner

    Heading: Sponsor
    All fields marked as sponsor

    But only show if there is a field present with the partner type.

    So if you go to a page it’ll check if it has fields, then it’ll display those fields in their groups, with a heading. Does that make sense?

    I can get them to show normally… but not with a heading and at the moment they’re all in the same div[row] and they should be in their own.

    I feel like there is a way I could do this with arrays but I’m a beginner.

    I can do it if I split them all up but it’s a heap of code.

    This is what I had:

    <?php if( have_rows('logos') ):  ?>
    	
    	<div class="row mb-5">
    	
    	<?php while( have_rows('logos') ): the_row();  ?>
    		
    <h3>Title would go Here</h3>
    		<?php if (get_sub_field('partner') == 'Major Project Sponsors') : ?>
    			<div class="col-sm-6 col-md-3 text-center py-3">
    				<a href="<?php the_sub_field('website'); ?>"><img src="<?php the_sub_field('logo'); ?>" /></a>
    			</div>
    		<?php endif; ?>
    
    <h3>Title would go Here</h3>
    		<?php if (get_sub_field('partner') == 'Other Project Sponsors') : ?>
    			<div class="col-sm-6 col-md-3 text-center py-3">
    				<a href="<?php the_sub_field('website'); ?>"><img src="<?php the_sub_field('logo'); ?>" /></a>
    			</div>
    		<?php endif; ?>
    
    <h3>Title would go Here</h3>
    		<?php if (get_sub_field('partner') == 'Partners') : ?>
    			<div class="col-sm-6 col-md-3 text-center py-3">
    				<a href="<?php the_sub_field('website'); ?>"><img src="<?php the_sub_field('logo'); ?>" /></a>
    			</div>
    		<?php endif; ?>
    
    <h3>Title would go Here</h3>
    		<?php if (get_sub_field('partner') == 'Sponsors') : ?>
    			<div class="col-sm-6 col-md-3 text-center py-3">
    				<a href="<?php the_sub_field('website'); ?>"><img src="<?php the_sub_field('logo'); ?>" /></a>
    			</div>
    		<?php endif; ?>
    
    <h3>Title would go Here</h3>
    		<?php if (get_sub_field('partner') == 'In Kind') : ?>
    			<div class="col-sm-6 col-md-3 text-center py-3">
    				<a href="<?php the_sub_field('website'); ?>"><img src="<?php the_sub_field('logo'); ?>" /></a>
    			</div>
    		<?php endif; ?>
    	
    	<?php endwhile; ?>
    	</div>
    <?php endif; ?>
  • Okay I’ve refined it a heap after looking into arrays:

    <?php if( have_rows('logos') ):
    
    	while( have_rows('logos') ): the_row(); 
    
    		$select = get_sub_field_object('partner');
    		$value = get_sub_field('partner');
    		$partnerArray = $select['choices']; 
    
    	endwhile;
    
     endif; ?>
    		
    <?php $colors = $partnerArray;
    	foreach ($colors as $color) {
    	    global $b;
    		$b++;
    			
    		echo "<h3>" . ucfirst($color) . "</h3>";
    		echo '<div class="row">';
    		while ( have_rows('logos') ) : the_row();
    		    if(get_sub_field('partner') == "{$color}"):
    				// display the repeater sub field values
    				echo    '<div class="col-sm-6 col-md-3 text-center py-3" id="'.$b.'">
    						 <a href="' . get_sub_field('website') .'"><img src="' .get_sub_field('logo') . '" /></a>
    					     </div>';
    			endif;
    		endwhile;
    	echo '</div>'; 
    }?>

    However it will display the titles regardless. If the titles exist, they are shown, even if there are no items on that page. I need them to only show if there are items.

  • I got to it in the end….

    Here’s my working solution:

    <?php 
    $all_attributes = array();
    $filter_attributes = array();
    
    if (have_rows('logos')): while (have_rows('logos')) : the_row(); 
        $attributes = get_sub_field_object('partner'); 
        $values[] = get_sub_field('partner'); 
        if($values) {
            foreach ($values as $value) 
                $all_attributes[] = $value; /* Save ALL values */
        } 
     endwhile; endif;
    
    /* use array_unique to remove duplicates from the array */
    $filter_attributes = array_unique ($all_attributes);
    ?>
    
    <?php $colors = $filter_attributes;
    	foreach ($colors as $color) {
    	    global $b;
    		$b++;
    		echo "<h3>" . ucfirst($color) . "</h3>";
    		echo '<div class="row">';
    		while ( have_rows('logos') ) : the_row();
    		    if(get_sub_field('partner') == "{$color}"):
    				// display the repeater sub field values
    				echo    '<div class="col-sm-6 col-md-3 text-center py-3" id="'.$b.'">
    						 <a href="' . get_sub_field('website') .'"><img src="' .get_sub_field('logo') . '" /></a>
    					     </div>';
    			endif;
    		endwhile;
    	echo '</div>'; 
    }?>
Viewing 3 posts - 1 through 3 (of 3 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.