WordPress handles roughly 30 ACF fields per post type comfortably. From 30 to 60 it starts to need care. Above 60-100 you almost always have an architecture problem hiding behind the field count. After running directory sites where some post types ballooned to 80+ fields before we refactored, here is what breaks at each tier and the patterns for splitting an oversized field group into something maintainable.
Jump to:
- Why field count matters
- Tier 1: under 30 fields (comfortable)
- Tier 2: 30 to 60 fields (manageable with care)
- Tier 3: 60 to 100 fields (architecture problem)
- Tier 4: 100+ fields (almost always wrong)
- Patterns for splitting an oversized field group
- The post type vs sub-system question
Why field count matters
Every ACF field on a post is two wp_postmeta rows (the value plus the _field_key reference). A post type with 50 fields means every post has 100+ meta rows. When WordPress fetches the post, the wp_postmeta table is queried for all rows for that post (or pulled from object cache if available).
Three things scale with field count:
- Row count in
wp_postmeta. Affects backup size, query plan efficiency, cache memory usage. - Editor render time in wp-admin. Every field has its own JavaScript bindings and DOM nodes.
- Field group JSON size. ACF's field group registration is loaded on every admin page. Large registrations slow the admin globally.
None of these are linear breakdowns. The site gets gradually slower as field count grows, not catastrophically broken at some specific number.
Tier 1: under 30 fields (comfortable)
Most post types live here. Editor experience is fast, page render is fast (with object cache), wp_postmeta rows are manageable.
Indicators you are here:
- Editor scroll feels native, no JavaScript jank.
wp_postmetatable for the post type is well under 1GB.- No noticeable slowdown when editing posts.
Treatment: just write the code. No special architecture decisions needed.
Tier 2: 30 to 60 fields (manageable with care)
The editor starts to feel slow on heavyweight pages (long Repeaters, many image fields). Object cache becomes non-negotiable. Field group organization matters more.
Indicators:
- Editor scroll has small but noticeable lag on big posts.
wp_postmetatable is 1-5GB.- Page renders are fine warm-cached, slow cold-cached.
Treatment:
- Ensure persistent object cache. Covered in Common ACF Performance Problems on Large WordPress Sites.
- Group fields with Tab fields. Visual grouping in the editor that costs nothing performance-wise.
- Use conditional logic to hide fields the editor does not need for the current context. Reduces visible complexity even when the field count stays the same.
- Audit for unused fields. Fields added optimistically two years ago and never used are dead weight. Remove them.
Tier 3: 60 to 100 fields (architecture problem)
The field count is now a symptom of a structural issue. The post type is doing too many jobs.
Indicators:
- Editor is visibly slow.
- New team members have trouble understanding what each field is for.
wp_postmetatable is 5-20GB.- Sub-systems start to bleed into each other (SEO fields mixed with content fields mixed with feature-flag fields).
Treatment: split the field group. Patterns below.
Tier 4: 100+ fields (almost always wrong)
At this scale, the architecture is the problem, not the field count itself. The post type has accreted features for years without refactoring. Editor experience is genuinely bad. Performance is bad even with object caching.
Indicators:
- New developers cannot find the field they need without searching.
- Editors complain.
wp_postmetais huge and grows fast.- Migration scripts that read the post type take minutes per post.
Treatment: this is a real refactor, not a quick fix. Plan it deliberately.
Patterns for splitting an oversized field group
Pattern 1: Options Page for site-wide settings. If 15 of the fields are actually site-wide configuration (header CTA copy, footer disclaimer, social profile URLs), move them to an Options Page. They were never per-post; they were always per-site. Covered in Using ACF Options Pages for Global Site Settings.
Pattern 2: Separate post type for related entities. If 20 of the fields belong to a "team member" concept that the editor manages via Repeater rows, promote team members to their own post type and link via Relationship. Each team member becomes its own URL, queryable independently, with its own ACF fields. The parent post's field count drops dramatically. See Why Deeply Nested ACF Flexible Content Layouts Become a Maintenance Nightmare for the broader pattern.
Pattern 3: Move SEO fields to a dedicated SEO plugin. Title, description, OG image, canonical URL, schema overrides: these belong in Yoast / Rank Math / etc., not in your custom field group. You get the plugin's full SEO feature set for free and your field count drops by 5-15.
Pattern 4: Move feature flags to a single JSON field. "Show component A," "Hide component B," "Enable variant C" used to be 10 True/False fields. Combine into one JSON field with a structured value, or split into a separate Options Page section if the flags are truly per-site.
Pattern 5: Push computed fields out of storage. If a field is always derived from other fields ("formatted address" computed from street + city + state), do not store it. Compute on read. Saves storage, eliminates "derived field is out of sync" bugs.
Pattern 6: Sub-page for editorial enrichment. Some agency builds have a "content" tab and an "enrichment" tab (FAQ, related links, internal notes for the editor). The enrichment tab can become a dedicated "post extras" sub-post linked to the main post via a Relationship field, edited separately when needed.
The post type vs sub-system question
The question I ask when a field group passes 50 fields: "is this one thing or three things that share a URL?"
A directory listing post type might genuinely be:
- Listing core data (name, address, hours, contact): 15 fields.
- Editorial enrichment (description, image gallery, testimonials): 20 fields.
- SEO and meta (title overrides, schema, social previews): 10 fields.
- Owner-facing fields (verification status, subscription tier, contact preferences): 15 fields.
That is four logical sub-systems sharing a single post type because they happen to share a URL. The 60-field field group is the consequence of that conflation.
The cleaner architecture might be:
- One
listingpost type with core data only (15 fields). - One
listing_ownersub-post in a sibling post type (15 fields), linked. - SEO fields moved to a dedicated SEO plugin.
- Editorial enrichment kept on the listing as Flexible Content (one field that contains arbitrary structured content).
Total field count per post type drops from 60 to under 20. The architecture is more legible. Editor experience improves dramatically. The trade-off is one extra post type to maintain and one Relationship lookup per page render.
For the broader agency-stack reasoning behind these decisions, see The Exact Stack I would Use to Run a Small WordPress Agency Today and Why Many Agencies Still Prefer ACF Over Gutenberg. For the WP-CLI patterns that audit field counts across a site, see Using AI with WP-CLI for Faster WordPress Operations.
Sources
Authoritative references this article was fact-checked against.
- ACF documentation (Advanced Custom Fields)advancedcustomfields.com
- get_post_meta() function reference (WordPress Developer Resources)developer.wordpress.org





