Created
February 27, 2012 16:02
-
-
Save wesrice/1924934 to your computer and use it in GitHub Desktop.
Return a random row of data from an ACF repeater field
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Get the repeater field | |
$repeater = get_field( 'repeater_field_name' ); | |
// Get a random rows. Change the second parameter in array_rand() to how many rows you want. | |
$random_rows = array_rand( $repeater, 2 ); | |
// Loop through the random rows if more than one is returned | |
if( is_array( $random_rows ) ){ | |
foreach( $random_rows as $random_row ){ | |
// Output data here. Replace sub field names. | |
echo 'Sub Field 1: ' . $repeater[$random_row]['sub_field_1'] . '<br/>'; | |
echo 'Sub Field 2: ' . $repeater[$random_row]['sub_field_2'] . '<br/><br/>'; | |
} | |
} else { | |
// Output data here. Replace sub field names. | |
echo 'Sub Field 1: ' . $repeater[$random_rows]['sub_field_1'] . '<br/>'; | |
echo 'Sub Field 2: ' . $repeater[$random_rows]['sub_field_2'] . '<br/><br/>'; | |
} | |
?> |
9 years later too. Thanks.
To keep ACF syntax, like get_sub_field(), nested repeaters, etc. i suggest to go with this:
<?php
// Randomize and shuffle the rows
$rows = get_field('repeater_field');
shuffle($rows);
$rand_repeater_fields = array_rand( $rows , 4 );
?>
<section>
<?php if( have_rows('repeater_field') ):
$stage_index = 0; ?>
<?php while ( have_rows('repeater_field') ) : the_row();
// print rows only if in array
if (in_array(get_row_index() - 1, $rand_repeater_fields)) { ?>
<?php // do your stuff ?>
<?= get_sub_field('repeater_subfeld') ?>
<?php if( have_rows('another_repeater_field') ): ?>
<?php while ( have_rows('another_repeater_field') ) : the_row(); ?>
<?php // do your stuff ?>
<?= get_sub_field('another_repeater_subfeld') ?>
<?php endwhile; ?>
<?php endif; ?>
<?php // increment index
$stage_index++;
} ?>
<?php endwhile; ?>
<?php endif; ?>
</section>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
8 years later, this still works great!