Home › Forums › Add-ons › Repeater Field › Output Repeater In Two Columns Sorted Alphabeticaly
Hi Guys
I have a requirement from a client to list a number of suppliers in two columns like this
1 5
2 6
3 7
4
After some googling, I was able to make this work with the following code
<ul class="col-md-6">
<?php $i = 0; $j = count( get_field('suppliers_table') );?>
<?php if( have_rows('suppliers_table') ): while ( have_rows('suppliers_table') ) : the_row(); ?>
<li><a href="<?php the_sub_field('company_url'); ?>"> <?php the_sub_field('company'); ?></a></li>
<?php if ( ( $i + 1 ) == ceil($j / 2) ) echo '</ul><ul class="col-md-6">'; ?>
<?php $i++; endwhile; ?>
<?php endif; ?>
</ul>
The trouble I am having is getting this to sort alphabetically on the front end. I spent a day googling this and nothing I tried worked. Now it may be my limited understanding of php here.
I found a function in the ACF support pages to put in the function.php which sort, but it will not work. ( See below, I did include the correct field key)
function my_acf_load_value( $value, $post_id, $field ) {
// vars
$order = array();
// bail early if no value
if( empty($value) ) {
return $value;
}
// populate order
foreach( $value as $i => $row ) {
$order[ $i ] = $row['field_57fcb8a09f91e'];
}
// multisort
array_multisort( $order, SORT_ASC, $value );
// return
return $value;
}
add_filter('acf/load_value/name=scores', 'my_acf_load_value', 10, 3);
I am now kind of tearing my hair out over this. Is this even possible. Any help would be greatly appreciated. Thanks Guys
Hi @mrkeithy
I believe you are on the right track. Kindly check this tutorial to learn how to sort a repeater: https://www.advancedcustomfields.com/resources/how-to-sorting-a-repeater-field/.
Please keep in mind that ‘field_57fcb8a09f91e’ should be the field key of the field you want to sort such as the company name.
I hope this helps 🙂
Hi James
Thanks for your reply, I did look at this page, It is the key, yet the function is not working. Is there anyway to build a sort into the two column loop I posted?
Sorry i am kind of newbie with php.
Keith
Hi James
Further to my last post, I finally made it work. I tried using the code on that page yesterday, but I must of been tired, because this morning and made it work. There may of been a small amount dancing around the room
(see below)
<ul class="col-md-6">
<?php $i = 0; $j = count( get_field('suppliers_table') );
$repeater = get_field('suppliers_table');
$order = array();
foreach( $repeater as $i => $row ) {
$order[ $i ] = $row['company'];
}
array_multisort( $order, SORT_ASC, $repeater );
if( $repeater ): ?>
<?php foreach( $repeater as $i => $row ): ?>
<li class="supplier_link">
<a href="<?php echo $row['company_url']; ?> "target="_blank"><?php echo $row['company']; ?></a>
</li>
<?php if ( ( $i + 1 ) == ceil($j / 2) ) echo '</ul><ul class="col-md-6">'; ?>
<?php $i++; endforeach; ?>
<?php endif; ?>
</ul>
Only been at this fro two days.
I still don’t understand why the function in functions.php is not working. Is there anyway to see if anything is conflicting with it?
Hi @mrkeithy
The code looks correct for me. Just make sure that you changed the hook based on your field name like this:
acf/load_value/name=suppliers_table
This page should give you more idea about it: https://www.advancedcustomfields.com/resources/acfload_value/.
Hope this helps 🙂
The topic ‘Output Repeater In Two Columns Sorted Alphabeticaly’ 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 Cookie Policy. If you continue to use this site, you consent to our use of cookies.