Home › Forums › Add-ons › Repeater Field › How do I sort repeater field alphabetically?
I’ve been searching the website for how to display a list of repeater field entries alphabetically, but can’t find anything.
I’m wanting to display a list of businesses, displaying the business name, address, phone number and order them alphabetically by the business name.
I tried utilizing the example from this page http://www.advancedcustomfields.com/resources/how-to/how-to-sorting-a-repeater-field/, but was lost as to what code to put in this particular section (below) – Plus, this would only order by the ID number, not alphabetically based on the value of one of the fields.
foreach( $repeater as $row )
{
// ... What do you put here?
}
?>
Here is the code I’m using right now – how would I sort this alphabetically by the ‘name’ sub-field?
<?php
// check if the repeater field has rows of data
if( have_rows('traditional_dining') ):
// loop through the rows of data
while ( have_rows('traditional_dining') ) : the_row();
?>
<div class="biz-module">
<h2><?php if(get_sub_field('website')) {?><a href="<?php the_sub_field('website'); ?>" title="Visit the website for <?php the_sub_field('name'); ?>"><?php }?><?php the_sub_field('name'); ?><?php if(get_sub_field('website')) {?></a><?php }?></h2>
<h3><a href="<?php the_sub_field('map_url'); ?>" title="Find <?php the_sub_field('name'); ?> on the map"><?php the_sub_field('address'); ?></a></h3>
<h4><?php the_sub_field('phone_number'); ?></h4>
</div>
<?php endwhile;
else :
// no rows found
endif;
?>
Just wondering if there will be a response from support here or not.
I spent yesterday working through this exact same question.
Here is what I found to work, applied to your case. Any PHP pros are welcome to optimise this. Note that I haven’t figured out the if statements, you should be able to get that working though.
<?php
// Get repeater value
$repeater = get_field('traditional_dining');
// Obtain list of columns
foreach ($repeater as $key => $row) {
$the_website[$key] = $row['website'];
$the_name[$key] = $row['name'];
$the_address[$key] = $row['address'];
$the_phone_number[$key] = $row['phone_number'];
$the_map_url[$key] = $row['map_url'];
}
// Sort the data by restaurant name column, ascending
array_multisort($the_name, SORT_ASC, $repeater);
// Display newly orded columns
// Unsure if this is the optimal way to do this...
foreach( $repeater as $row ) { ?>
<div class="biz-module">
<h2><a href="<?php echo $row['website']; ?>" title="Visit the website for <?php echo $row['website']; ?>"><?php echo $row['name']; ?></a></h2>
<h3><a href="<?php echo $row['map_url']; ?>" title="Find <?php echo $row['name']; ?> on the map"><?php echo $row['address']; ?></a></h3>
<h4><?php echo $row['phone_number']; ?></h4>
</div>
<?php } ?>
this may be a quicker way –
http://php.net/manual/en/function.ksort.php
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>
The topic ‘How do I sort repeater field alphabetically?’ 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.