The biggest obstacle to switching from Advanced Custom Fields (ACF) or Secure Custom Fields (SCF) isn’t learning a new admin UI. It’s the fact that your theme probably contains dozens (or hundreds) of get_field(), have_rows(), and get_sub_field() calls. Rewriting all of them to use a different API is hours of work and risk of breakage.
Field Forge’s ACF Compatibility Layer implements the full ACF template function API. When Field Forge is active and ACF / SCF is not, the global ACF functions resolve to Field Forge’s storage. Your theme code keeps working unchanged.
Field Forge implements these ACF functions natively:
get_field($field_name, $post_id = null, $format_value = true);
the_field($field_name, $post_id = null, $format_value = true);
get_fields($post_id = null, $format_value = true);
get_field_object($field_name, $post_id = null, $format_value = true, $load_value = true);
get_field_objects($post_id = null, $format_value = true, $load_value = true);
update_field($field_name, $value, $post_id = null);
delete_field($field_name, $post_id = null);
have_rows($field_name, $post_id = null);
the_row($format_value = false);
get_row($format_value = false);
get_row_index();
get_row_layout();
reset_rows();
get_sub_field($field_name, $format_value = true);
the_sub_field($field_name, $format_value = true);
get_sub_field_object($field_name, $format_value = true, $load_value = true);
update_sub_field($field_name_or_selector, $value, $post_id = null);
acf_get_field_group($id_or_key);
acf_get_field_groups($args = []);
acf_get_fields($field_group);
// Both the 'options' and 'option' pseudo-IDs work
get_field('site_logo', 'options');
get_field('site_logo', 'option');
get_field('bio', 'user_123');
update_field('bio', $new_bio, 'user_123');
acf_register_block_type([
'name' => 'hero',
'title' => 'Hero Section',
'render_callback' => 'render_hero_block',
'category' => 'theme',
'icon' => 'cover-image',
]);
Every function above works identically to ACF. Same parameters, same return values, same behavior.
When Field Forge is active:
function_exists() guardswp_fieldforge_values table)$format_value parameter is respected — passing false returns raw values, true returns formatted values (same as ACF)If ACF is also active on the same site (during migration), Field Forge’s functions are not registered — ACF takes precedence. After you deactivate ACF, Field Forge’s versions take over. This means you can install Field Forge alongside ACF without conflicts during testing.
Most “ACF alternative” plugins require you to rewrite every get_field() call in your theme to use their own API. For a site with 200 template files and 500+ field references, this is weeks of work and high risk of regressions.
Field Forge’s compat layer reduces migration to:
Zero template changes. Zero risk of “I forgot to update that one template.”
Secure Custom Fields (the WordPress.org fork of ACF created in October 2024) uses the same template functions as ACF — get_field(), have_rows(), etc. Because Field Forge’s compat layer implements the ACF API, it also works for SCF code. If you’re running SCF and want to migrate to Field Forge, same process, same compat layer.
Plugins that integrate with ACF usually call ACF’s global functions. Popular examples:
acf_get_field_groups() and acf_get_fields()get_field() for dynamic content tagsget_field() for template partsMost of these keep working when you switch from ACF to Field Forge because the compatibility layer provides the same API.
acf_register_block_type() worksACF’s block registration function is one of the most common ACF Pro features agencies rely on. Custom Gutenberg blocks registered via acf_register_block_type() keep working after migration:
// This code works unchanged with Field Forge active instead of ACF
acf_register_block_type([
'name' => 'feature-card',
'title' => __('Feature Card'),
'render_callback' => 'my_feature_render_callback',
'category' => 'theme',
'icon' => 'star-filled',
]);
function my_feature_render_callback($block) {
$title = get_field('title'); // Works
$icon = get_field('icon'); // Works
// ... render HTML
}
For full transparency, here’s what Field Forge doesn’t (yet) replicate from ACF:
fieldforge/ instead of acf/acf.php JavaScript API in the adminField Forge has its own JS APIFor 95% of ACF sites, none of these gaps matter because theme developers only use the template functions, not the internal APIs.
Because the ACF compatibility layer is tested against real ACF test cases, we know it handles:
format_value parameter)'options' and 'option' pseudo-IDs)acf_register_block_type() callbacksformat_value parameter across all functionsIf you find a case where our compat layer behavior differs from ACF, it’s a bug we want to fix. Email support with details.
Get Field Forge — from $40/year →
The ACF compatibility layer is in every version of Field Forge, including the free one. Migration from ACF or SCF takes minutes, not weeks.
We use analytics and marketing cookies (Google Analytics, Google Ads, Meta) to understand traffic and improve the site. Strictly-necessary cookies are always on. See our Privacy Policy.