I’ve a repeater field in the ACF pro options table (so for global use) and I want to be able to display specific data from the repeater fields.
EG: I have services repeater field, and in there is service_name, service_description, service_image
I’ve tried adding some function:
function my_acf_repeater($atts, $content='') {
extract(shortcode_atts(array(
"field" => null,
), $atts));
$_content = '';
$row = 0;
if( have_rows($field) ):
while ( have_rows($field,'options') ) : the_row();
$_tmp = str_replace('%ROW%', $row, $content);
$_content .= do_shortcode( $_tmp ) . '<br>';
$row++;
endwhile;
else :
$_content = "$field does not have any rows";
endif;
return $_content;
}
add_shortcode("acf_repeater", "my_acf_repeater");
Trying to specify to pull the data from the “option” table but it’s not working. I’m just getting “services does not have any rows”
How can I get the specific data I need?
you need to add “options” to the if statement as well as the while
if( have_rows($field, 'options') ):
Hi John,
Thank you for pointing this out. I’ve added “option” to the IF statement too.
However, I’m getting no data returned from my shortcode.
So I have a repeater, “services” with sub-fields of “service-name”, “service-description-short” and “service-description-long”
I just want the “name” and the “short description” so using the shortcode:
[acf_repeater field="services"]
service name: [acf field='services_1_service-name']
service desc: [acf field='services_1_service-description-short']
[/acf_repeater]
What is displayed is:
service name: service desc:
It’s not populating with the data from my repeater second row (I’ve tried it with %ROW% 0 for the first row too, that’s the same result)
What am I not getting?
Wow… the solution was SOOOOOO simple.
I do not even need to add any code to my functions.php
All I needed was to add the post_id=”options” to the shortcode.
[acf field= "services_0_service-name" post_id="options"]
The answer is always easier than you think!
Hello @leem2209 ,
I’m trying to achieve the same. The problem is that if i have 10 entries in my repeater, then i get as output the correct result x 10 times. how do you limit to get the output only once and not multiplied by the repeater rows?