Elementor ACF: connecting custom fields to your page builder

Alipio Gabriel · · 5 min read
Elementor ACF: connecting custom fields to your page builder

Elementor ACF integration is one of those features that looks simple in a YouTube tutorial and then humbles you the moment your field group is nested inside a repeater. We have wired this up on enough client builds to know exactly where things go sideways, and this post covers the setup that actually holds up over time.

What Elementor Pro and ACF are each doing

Advanced Custom Fields (ACF) is a WordPress plugin that lets you attach structured data to any post, page, taxonomy, or options page. Think property details on a real-estate listing, team member bios, product specs, event dates. The data lives in the database; ACF just gives you a clean interface to manage it.

Elementor Pro is the page builder layer. Its Dynamic Tags system can pull that stored ACF data and render it inside any widget: a heading, an image, a button URL, a background, a gallery. The two tools are genuinely complementary. ACF handles the data model; Elementor handles the presentation. When the wiring is clean, an editor can update a field value and see it reflected everywhere on the site without touching the template.

The free version of ACF works for basic field types. For repeaters, flexible content, and gallery fields, you need ACF Pro. Elementor’s dynamic tags require Elementor Pro. Budget roughly $49 to $59 per year for each if you do not already hold licenses.

Setting up the connection, step by step

First, confirm both plugins are active and updated. Elementor introduced native ACF support years ago, but older versions had gaps around certain field types, so stay current.

Create your ACF field group and assign it to the post type you are working with. For this example, say you have a custom post type called team_member with fields for job_title (text) and headshot (image, set to return Image Array).

Build your template in Elementor under Templates > Theme Builder. Add a Heading widget for the job title, click the dynamic icon (the stack-of-coins icon beside the field), choose ACF Field, and select job_title. For the image, drop in an Image widget, open its dynamic tag, choose ACF Field, select headshot. Preview against a real team member record. If the field returns nothing, check that the field group’s location rules match the post type and that at least one post has data saved.

Repeater fields take one extra step: use the Loop Grid widget (introduced in Elementor 3.8) rather than trying to unroll a repeater inside a standard section. Loop Grid creates a nested template for each repeater row, which keeps the markup sane and the editor experience reasonable.

Field types that need special handling

Not every ACF field maps cleanly to an Elementor dynamic tag. A few worth knowing:

  • Relationship and Post Object fields return post IDs. Elementor can pull the linked post’s title or URL from them, but rendering a list of related posts usually calls for a custom PHP template or a Query Loop, not a standard dynamic tag.
  • Google Map fields have no native Elementor widget to receive them. You will need a shortcode or a custom widget.
  • Flexible Content fields are powerful but Elementor cannot render them dynamically without ACF Blocks or custom code. If a client needs flexible layouts driven by flexible content, that work belongs in a custom block or a bespoke template, not a drag-and-drop widget stack.
  • Options Page fields work fine with dynamic tags, but you must set the Source to Options in the tag settings. Easy to miss.

When the Elementor ACF combo is not the right call

This pairing works well for marketing sites and brochure-style pages where a non-technical editor needs to manage structured content. It gets strained on anything with complex relational data, heavy filtering, or real application logic. A directory site where users search and filter hundreds of records by multiple ACF field values will perform poorly if the filtering is handled client-side by a page builder widget. That scenario calls for a server-side query layer and probably a move toward custom web apps thinking rather than a page builder approach.

Performance is the other constraint. Each dynamic tag triggers a database call. A page with twenty ACF-powered widgets on a shared host is not the same as a statically cached page. We always pair Elementor-heavy builds with aggressive object caching and a CDN. If you want a deeper look at what affects load time, our WordPress speed optimization work covers that ground.

A quick checklist before you go live

  • Every dynamic tag has a fallback value set, so empty fields do not render a blank widget or broken layout.
  • The ACF field group’s location rules are tight: only the intended post types, not sitewide.
  • You have previewed the template against at least three real records with different data lengths.
  • Caching is configured to exclude logged-in users so editors see live field data, not a stale cache.
  • The ACF and Elementor Pro licenses are on an auto-renew plan so updates keep flowing.

When it makes sense to bring in a developer

The visual setup covers a lot of ground. But when the data model gets complex, when field logic depends on user roles, or when the template needs to serve as the foundation for a long-lived site rather than a quick launch, having a developer involved from the field-planning stage saves significant rework later. A miscategorized field type or a schema that made sense for ten records breaks badly at a thousand.

If you are scoping a project that involves custom post types and structured content, a custom WordPress build scoped properly from the start is almost always cheaper than retrofitting a page builder site six months later.

If you want a second set of eyes on your setup, or you are starting fresh and want the architecture done right, book a free 30-minute call and we can talk through what your project actually needs.

Share