Large sets
Last updated
Last updated
Repeatable fields in ACF are stored as data arrays in Metafields of type "json_string" which in Shopify has a storage limit of 100,000 characters. This limit may prove a challenge when working with large sets of repeatable fields, especially of types Media v2 or HTML in excess of 100-150 occurrences (sometimes fewer when working with large blocks of HTML). ACF is able to work around this limitation by distributing your content across multiple individual Metafields. This is something you need to enable on a per-field basis (due to the theme handling being different - see below) but is otherwise handled internally to give you a seamless experience when working in the ACF editor or with exports/imports.
The "automatically handle large sets of repeatable values" setting is available for all field types that can be defined as repeatable (with the exception of Shopify » ... types, see below) and for all scopes except for product types, vendors, and locations. With "large sets" enabled the storage limit is now 1,000,000 characters, which allows you to work with sets in excess of 1,000 elements.
Note that each individual occurrence (e.g a block of HTML) still needs to fit inside 100,000 characters Metafield and - in case of 10+ occurrences - this space is shared with other occurrences A rough calculation of the size limit per occurrence (for reasonably like-sized blocks) is 100,000 / ceil(#occurrences / 10)
Large sets are not available for Shopify » ... types
So why is this just not enabled by default? The reasoning here is that enabling the setting requires a subtle change to your theme since the original Metafield no longer contains the actual data items but rather is a "reference object" with references to the actual data Metafields.
This code example shows you how to loop a repeatable HTML field with "large sets" enabled:
Please note that the code doesn't just render the "html" loop variable as we would for a traditional repeatable field but uses it as a reference to get to the actual Metafield used to store the data for that specific entry. shop.metafields.globals should be replaced with whatever scope and namespace your field is defined under, for example, product.metafields.accentuate.
This code example shows you how to loop a repeatable Media v2 field with "large sets" enabled: