Bricks enables us to conditionally output elements if a ACF field of basic type like Text has value by selecting it in the Dynamic data condition with != and leaving the value input empty.
With the above condition applied, the element will only be output if the custom field named header_notice
created with ACF is not empty.
What about the case when the field type is a little more complex one (that returns an array) like the ACF Repeater?
We need to define a custom function that returns either true (1) or false (0) and check against = 1 (to check if not empty) or ! = 1 (to check if empty).
Add the following in child theme‘s functions.php
(w/o the opening PHP tag) or a code snippets plugin:
// Function to check if the given ACF Repeater field has any rows of data.
function bl_have_rows( $field ) {
// if ACF is not active, return false
if ( ! class_exists( 'ACF' ) ) {
return false;
}
return get_field( $field ) ? true : false;
}
and use it like this:
{echo:bl_have_rows(site_builders)}
Replace site_builders
with the name of your ACF Repeater’s field name.
With the above condition in place, the Section will be output only if a ACF Repeater having a field name of site_builders
has at least 1 row of data.
14 comments
Nicolas
Would be nice to add it to BricksExtras optional additional conditions
David Browne
You can now use the 'query results count' as a condition to achieve the same.. No need for the extra function, just check if the results count is zero on the element with the repeater query.
https://brickslabs.com/query-results-count-in-bricks/
Sridhar Katakam
If I am not mistaken, this method still has its place for the cases when there is no ACF Repeater query on the page.
David Browne
That's true.
Maddalena Fasser
I tried to check ACF Repeater's sub fields as well with this method, but wasn't successful so far. Would you consider extending the tutorial to include the sub fields? Thanks!
rob
Great tip - thank you!
Following on from this, if I am using the Bricks Slider, let's say, and relationship fields (to display testimonials in the Bricks Slider - very common) how can I query the relationship field to check the amount of selected content? (i.e 1, 3, 5 testimonials to show).
I ask this as the current slider loops through the content and creates multiple slides, even if it's just one testimonial. I am trying to query it so I create a different loops depending on the 'count' of the content chosen ๐ (i.e == 1 or < 1).
:value sadly didn't work..
Simone Schregenberger
This is an addition for people who added an acf repeater to a term/taxonomy and want to check the repeater rows on the archive page:
Add get_queried_object() to the get_field() function.
function bl_have_rows( $field ) {
// if ACF is not active, return false
if ( ! class_exists( 'ACF' ) ) {
return false;
}
return get_field( $field, get_queried_object() ) ? true : false;
}
Bradley Gregory
FYI - I got this to work for flexible content using has_rows function. Is there any reason we should choose the class check vs the has rows?
Sridhar Katakam
Class check is not compulsory but a good thing to have just in case ACF-specific functions are being called when ACF is deactivated for whatever reason. But practically speaking, it is ok in most cases to just use since the likelihood of the required plugin not being active is rare.
Bradley Gregory
Ah, that is a really good point. Thanks!
Domenico Mastroianni
Iโve got a couple of website using jetengine and would love to have the ability to control the condition for their repeaters.
Sridhar Katakam
Try https://brickslabs.com/checking-if-repeater-cloneable-meta-fields-are-empty-in-bricks/.
Domenico Mastroianni
Would this code work only with ACF or other similar plugin that creates repeaters?
Sridhar Katakam
only ACF.
Which custom fields plugin do you use?