Support

Account

Home Forums Add-ons Repeater Field Sort Repeater Field by Reverse Date Entered

Solved

Sort Repeater Field by Reverse Date Entered

  • Hi,

    So the normal sort on repeater field is oldest entered goes to top – I want the reverse of this last repeater field entered goes to top.

    I have my repeater code with array_multisort

    function trs_testimonial_loop_sort() {
    
    //My ACF Fields for reference
    //testimonials - field group
    //testimonial - sub-field
    //testimonial_header - sub-field
    
    $repeater = get_field('testimonials');
    
    /*
    *  Obtain a list of columns
    *  - $column_id will look something like this:
    
    Array
    (
        [0] => 3
        [1] => 2
        [2] => 4
        [3] => 1
    )
    
    */
    
    foreach( $repeater as $key => $row ) {
        
        $column_id[ $key ] = $row['testimonial_header'];
    }
    
    /*
    *  Use the $column_id array to sort the $repeater array
    */
    
    array_multisort( $column_id, SORT_DEC, $repeater );
    
    /*
    *  Do stuff with the repeater... Note: has_sub_field loop will not use the "sorted" $repeater array
    */
    
    		foreach( $repeater as $row ) {
    		$testimonial_p = $row['testimonial'];
    		$testimonial_h2 = $row['testimonial_header'];
    
    		echo '<article><div class="entry-content testimonial">';
    		echo '<p>' . $testimonial_p . '</p>';
    		echo '<h2>' . $testimonial_h2 . '</h2>';
    		echo '</div></article>';
    		}
    }

    So really the sort here sorts alpha according to the text strings, how would I do this sort by the date and order the repeater field was created.

  • hi, try if this works: (sort by date-field instead of header)

    foreach( $repeater as $key => $row ) {
    		$thedate = $row['your_date_field']; 
    		$column_id[ $key ] = strtotime($thedate);
    	}
    array_multisort( $column_id, SORT_DESC, $repeater );
    	foreach( $repeater  as $row ){

    i assume date field is part of the repeater.
    replace your_date_field with name of the date field. (part of my code)

  • Hi again,
    Thanks for your help – actually I didn’t have a date field – but added one and used this

    foreach( $repeater as $key => $row ) {
        
        $column_id[ $key ] = $row['date_added'];
    }
    
    /*
    *  Use the $column_id array to sort the $repeater array
    */
    
    array_multisort( $column_id, SORT_DESC, $repeater );
Viewing 3 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic.