ACF Integration
Auto-activates when Advanced Custom Fields is installed and active. No settings, no configuration — the integration lights up automatically.
Data Roots
acf — Post Fields
Resolves ACF fields attached to the current post.
{{ acf.hero_image }}
{{ acf.brand_color }}
{{ acf.event_date | acf_date "F j, Y" }}
Properties are dynamic — populated from your ACF field groups filtered by the current post type. When you type acf. in the editor, autocomplete shows the actual field names and labels for that post type.
acf_option — Options Page Fields
Resolves fields from ACF Options pages.
{{ acf_option.company_logo | acf_image 'medium' }}
{{ acf_option.phone_number }}
{{ acf_option.footer_text }}
NOTE
Options page fields use static placeholder properties in the editor, so autocomplete won’t show your actual field names. Fields are resolved correctly at runtime — you just need to know the field name.
acf_user — Current User Fields
Resolves ACF fields for the logged-in user. Returns empty values when no user is logged in.
{{ acf_user.job_title }}
{{ acf_user.profile_photo | acf_image }}
{{ acf_user.department }}
NOTE
Like acf_option, user field properties use static placeholders in the editor. Autocomplete won’t show actual field names, but fields resolve correctly at runtime.
acf_term — Current Term Fields
Resolves ACF fields for the current queried taxonomy term. Only meaningful on taxonomy archive pages — on other page types, fields will return empty values.
{{-- On a category archive page --}}
{{ acf_term.banner_image | acf_image }}
{{ acf_term.featured_color }}
Field Proxy
All four roots use a lazy-loading proxy — get_field() is only called when a specific field is accessed via dot notation. Results are cached per render, so accessing the same field multiple times only triggers one get_field() call. ACF’s false return for non-existent fields is normalized to null.
ACF Modifiers
Field Modifiers
| Modifier | Description | Arguments |
|---|---|---|
acf_label | Converts a select/checkbox/radio stored value to its display label. Works with arrays (multi-select). | field (field name for lookup) |
acf_link | Renders an ACF Link field array as an <a> tag. Adds rel="noopener" when target is set. | text (optional custom label) |
acf_date | Formats an ACF Date Picker value (Ymd format) into a human-readable string. Also handles Date/Time Picker formats. | format (default: site’s date format) |
acf_taxonomy | Renders an ACF Taxonomy field as comma-separated names. Use format='links' for linked term names. | format (links for anchors) |
Examples:
{{ acf.priority | acf_label 'priority' }} → "High" (from stored value "high")
{{ acf.cta_link | acf_link "Get Started" }} → <a href="..." target="_blank" rel="noopener">Get Started</a>
{{ acf.event_date | acf_date "F j, Y" }} → "March 15, 2026"
{{ acf.post_categories | acf_taxonomy }} → "News, Featured"
{{ acf.post_categories | acf_taxonomy format="links" }} → linked term names
Media Modifiers
| Modifier | Description | Arguments |
|---|---|---|
acf_image | Renders an ACF Image field array as an <img> tag with width, height, and alt attributes. | size (registered image size) |
acf_file | Renders an ACF File field array as a download <a> link with download attribute. | text (optional custom label) |
acf_oembed | Renders an ACF oEmbed field. Fetches embed HTML from URLs via wp_oembed_get(). | — |
acf_gallery | Renders an ACF Gallery field as concatenated <img> tags. Internally uses acf_image for each item. | size (registered image size) |
Examples:
{{ acf.hero_image | acf_image 'large' }}
{{ acf.download_pdf | acf_file "Download PDF" }}
{{ acf.video_embed | acf_oembed }}
{{ acf.photo_gallery | acf_gallery 'thumbnail' }}
Editor Autocomplete
For the acf root (post fields), the integration hooks into the editor context to inject field metadata — name, label, and type — for the current post type. When you type acf. in the sidebar, you see your actual field names with their labels.
The acf_option, acf_user, and acf_term roots display generic placeholder labels in autocomplete since their fields aren’t scoped to a specific post type. Fields still resolve correctly at runtime.
Security
- All HTML-producing modifiers sanitize output via
esc_url(),esc_attr(),esc_html(), andwp_kses_post()before returning - Field access goes through ACF’s own
get_field(), which respects ACF’s field-level visibility rules - The field proxy normalizes
false→nullto prevent ACF’s “field not found” return value from leaking as content