ACF Custom Field Types: What’s Missing and How to Add Them
Every WordPress project that uses Advanced Custom Fields hits the same wall eventually. ACF ships with 30+ solid field types, but the moment a client needs an address field, a phone input with country dial codes, or a gradient picker for their hero background, you’re back to duct-taping three separate fields together or writing a custom field type from scratch.
This post covers the most common gaps in ACF’s native field set and a single plugin that fills all of them.
What ACF Gives You Out of the Box
ACF’s native library covers the fundamentals well. You get text, number, email, URL, password, and range for basic inputs. There’s a full choice set: select, checkbox, radio button, button group, and true/false. Content fields include image, gallery, file, WYSIWYG editor, color picker, and oEmbed. For relationships: post object, page link, relationship, taxonomy, user, and link. Date picker, time picker, date-time picker, and Google Map round out the jQuery-powered fields. Layout fields (repeater, flexible content, group, clone, tab, accordion) handle structure.
That’s a strong foundation. But there are entire categories of real-world data that aren’t covered.
The Gaps Worth Knowing About
Design and Responsive Control
ACF has a color picker, but nothing for CSS gradients. If you’re building a Gutenberg block or a theme options panel and you want a visual gradient editor that outputs a ready-to-paste CSS string, you’re writing it yourself.
The same problem shows up with spacing and sizing controls. ACF’s range field gives you a single numeric slider. Responsive designs need three values – desktop, tablet, and mobile. The standard workaround is three separate range fields with manual naming conventions, which is fragile and clutters the field group.
Unit-aware inputs are another gap. A font size field in ACF is either a plain number (losing the unit) or a text field (losing validation). Neither is clean.
Gaps: Gradient Picker, Responsive Range, Unit Control (saves { value, unit } as JSON), Color Swatch (radio choices rendered as clickable colour swatches rather than text labels).
Structured Data Fields
These are the fields that come up on almost every project:
Address – The ACF workaround is five separate text fields (street, city, state, postal code, country) manually grouped. That works, but it’s five fields where one should do the job. A single address field that stores a PHP array is cleaner for both the editor UI and your template code.
Phone Number – A standard ACF text field with no format enforcement is what you get. International projects need a proper dial-code selector with flag icons and E.164 format output. Validating phone numbers client-side without it is a project in itself.
Country Selector – Manually entering 249 countries as select choices is something no one should have to do. A preloaded ISO 3166-1 dropdown that returns the alpha-2 code handles it in one field.
Currency – Same problem. ISO 4217 currencies as a searchable dropdown is a common need for WooCommerce stores, invoice builders, and financial tools. ACF has nothing for it natively.
Date Range Picker – ACF’s date picker handles one date. Booking systems, event registrations, and availability calendars need a start and end date in a single field. The two-field workaround works but leaves the relationship between the fields implicit.
Gaps: Address, Phone Number, Country Selector, Currency, Date Range Picker.
Content and Editorial Fields
Table – A fully editable grid with dynamic rows and columns is a recurring need for pricing tables, spec sheets, and sports statistics. ACF has no native table field. The repeater-of-repeaters workaround exists but the editor experience is poor.
Markdown – ACF’s WYSIWYG editor is heavy. For documentation, developer-focused content, or any workflow where writers prefer Markdown, there’s no native option. A Markdown field with a toolbar and live preview is a different class of editing experience.
Star Rating – Review sites, testimonial blocks, and scored content all need a click-to-rate widget. ACF’s number field with validation is the current workaround.
Icon Picker – ACF added an icon picker in recent versions, but it’s limited. A Font Awesome Free visual icon picker with search is more practical for most theme developers.
Gaps: Table, Markdown, Star Rating, Icon Picker (Font Awesome Free).
Developer-Facing Fields
JSON Field – A syntax-highlighted JSON editor with real-time validation is useful for API configs, settings objects, and any developer-facing configuration stored as post meta. ACF’s text area with no validation is the current substitute.
Nav Menu Selector – Dynamically assigning WordPress navigation menus to post types or templates requires a custom field. ACF has no native menu picker, so the workaround is a select field manually populated with wp_get_nav_menus() via an acf/load_field hook.
Advanced Link – ACF’s standard link field covers the basics. An enhanced version with internal post search, link title, target, type detection, and a post_id return value is more useful in practice, especially for navigation components and CTA blocks.
Gaps: JSON Editor, Nav Menu Selector, Advanced Link.
How to Add Them: Extra Fields for ACF
Extra Fields for ACF adds 30 field types to ACF’s field group editor – 17 free, 13 in the Pro tier. All of them work inside repeater fields, flexible content, and clone fields. No custom database tables; values are stored in standard post meta and retrieved with get_field().
Installation:
- In your WordPress admin, go to Plugins > Add New Plugin.
- Search for Extra Fields for ACF.
- Install and activate. ACF (free or PRO) must already be active.
- Go to Settings > Extra Fields for ACF and enable the field types you want.
- Open an ACF field group and the new types appear in the field type selector.
The settings page lets you disable any field type you don’t need. Disabled fields don’t appear in the selector and load no assets – useful for keeping the field group editor clean on large projects.
The 17 Free Field Types
| Field | What it solves |
|---|---|
| Icon Picker | Font Awesome Free visual selector, returns class string |
| Unit Control | Numeric input + unit selector, saves { value, unit } |
| Gradient Picker | Visual CSS gradient builder, saves ready-to-use CSS string |
| Responsive Range | Three range sliders (desktop/tablet/mobile) in one field |
| Date Range Picker | Start and end date selection, saves { start, end } |
| Table | Editable grid with dynamic rows/columns, saved as JSON |
| Country Selector | All 249 ISO 3166-1 countries, no API key needed |
| Phone Number | International dial code + number input, returns E.164 format |
| Markdown | EasyMDE editor with toolbar and live preview |
| Star Rating | Click-to-rate, 1-5 stars, returns integer |
| Nav Menu Selector | Pick from any registered WordPress navigation menu |
| JSON | CodeMirror editor with real-time JSON validation |
| Address | Single structured field: street, city, state, postal code, country |
| Currency | All ISO 4217 currencies, returns currency code |
| Color Swatch | Radio choices rendered as clickable colour swatches |
| Button Group | Segmented button toggle (single or multi-select) |
| Advanced Link | Enhanced link picker with post search, title, target, post_id |
The 13 Pro Field Types
The Pro tier adds fields for more complex use cases:
Photo Gallery – Drag-and-drop gallery manager using the WordPress Media Library, with per-image caption, alt text, and custom link. More flexible than ACF’s native gallery field.
OpenStreetMap – Leaflet.js map with Nominatim address autocomplete. No Google Maps API key required, fully GDPR-compliant. Supports single or multiple markers and returns { lat, lng, zoom, address, markers[] }.
Image Hotspot – Click to place pins on an image. Each hotspot stores percentage-based coordinates (fully responsive), label, description, link, and icon. Four pin styles: Dot, Map Pin, Numbered, Custom Icon.
Tags Input – Tagify chip input with predefined whitelist, optional WordPress taxonomy sync, drag-to-reorder, and min/max tag count. Returns a PHP array, CSV, or JSON.
oEmbed – Paste a YouTube, Vimeo, Spotify, SoundCloud, TikTok, or Twitter/X URL and get a live embed preview in the admin. Saves { url, provider, title, thumbnail, html, width, height }.
Code Editor – Full CodeMirror multi-language editor (HTML, CSS, JavaScript, PHP, Python, Shell, SQL, YAML). Configurable theme, line numbers, tab size, and word wrap.
DateTime Picker – Combined date and time in one field via Flatpickr. Supports 12h/24h format, minute step, and min/max datetime boundaries.
Stripe Payment – Stripe Payment Element embedded inside an ACF form. Supports cards, Apple Pay, and Google Pay. Saves payment intent ID, status, amount, and currency on success.
Time Zone Selector – All ~590 IANA time zones grouped by continent with UTC offset display.
Image Selector – Visual image-thumbnail radio/checkbox grid. Define choices as value | label | image_url in field settings.
Hidden Input – Read-only field with dynamic token support: {{user_id}}, {{post_id}}, {{date}}, {{time}}. Can auto-update on every save.
Post Types Selector – Dropdown of all registered WordPress post types. Returns slug, label, or WP_Post_Type object.
Slug Field – Auto-sanitized URL slug input with real-time formatting, sync-from-another-field, and server-side uniqueness validation.
Template Usage
All fields use standard ACF functions:
// Unit Control
$font_size = get_field('font_size');
echo $font_size['value'] . $font_size['unit']; // "16px"
// Address
$address = get_field('office_address');
echo $address['street'] . ', ' . $address['city'];
// Responsive Range
$spacing = get_field('section_padding');
// $spacing['desktop'], $spacing['tablet'], $spacing['mobile']
// Table
$table = get_field('pricing_table');
// Or use the helper: the_table('pricing_table');
// Country Selector
$country_code = get_field('country'); // "BD"
No special retrieval functions are needed. Everything goes through get_field() and the_field() the same as any native ACF field.
Key Takeaways
- ACF’s 30+ native fields cover text, choice, content, and relational data well, but common real-world cases (address, phone, gradient, responsive values, table, date range) require workarounds.
- Extra Fields for ACF adds 30 field types directly into the ACF field group editor – 17 free, 13 Pro.
- All fields use standard
get_field()/the_field()retrieval and store values in post meta. No new database tables.
Install the free version from wordpress.org/plugins/extra-fields-for-acf and enable only the fields you need from Settings > Extra Fields for ACF.