I see a lot of forum posts about clone fields inside repeaters, but I haven’t found any help with getting values from a clone of a repeater. For example, get_sub_field( 'sub_field_name' )
works on the original field, of course, but does not work on the cloned field. ACF treats the cloned field as a sub field of the clone, so get_sub_field( 'repeater_name' )
produces an array of the actual rows I want to process. It’s like I need to do while( have_rows() ) : the_row()
inside my main while(have_rows)
loop if the field is a clone of a repeater.
// $area = slug of the field
while( have_rows( $area, $page_id ) ) : the_row();
$row = get_row();
var_dump( $row );
endwhile;
Repeater field output:
array(2) {
["field_5a1d86e968289"]=>
string(10) "search-bar"
["field_5a1d95b3d4cc2"]=>
NULL
}
Clone field output: (single row includes multiple rows)
array(1) {
["field_5a1d8827cd34c_field_5a1d7ec7fba73"]=>
array(2) {
[0]=>
array(2) {
["field_5a1d86e968289"]=>
string(14) "featured-books"
["field_5a1d95b3d4cc2"]=>
NULL
}
[1]=>
array(2) {
["field_5a1d86e968289"]=>
string(14) "featured-posts"
["field_5a1d95b3d4cc2"]=>
NULL
}
}
}
Can I make have_posts()
loop over the cloned fields, so they act as normal rows after the_row()
?
This is the code I ended up with to handle the cloned repeater:
function my_acf_sections( $area = '' ) {
if( ! function_exists( 'get_field' ) ) return;
$page_id = get_queried_object_id();
if( have_rows( $area, $page_id ) ) :
while( have_rows( $area, $page_id ) ) : the_row();
$section_content = get_sub_field( 'section_content' );
if( $section_content ) {
// Do stuff with fields
} else {
// Handle cloned repeater
$clone = get_field_object( $area );
if( ! isset( $clone['sub_fields'] ) ) continue;
$clone = get_field_object( $area )['sub_fields'][0];
if( $clone['_clone'] ) my_acf_sections( $clone['name'] );
}
endwhile;
endif;
}
I’m open to suggestions for something better.
The topic ‘Cloned repeater’ 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.