Migrating from ACF to Fieldstone
Fieldstone imports your Advanced Custom Fields groups in one click, gives you the same template functions you already write, and stores values in fast custom tables instead of postmeta — without touching your existing ACF data.
Why teams switch
- Faster, cleaner storage. Fieldstone keeps one indexed row per post in a dedicated table, instead of two
wp_postmetarows per field. Your postmeta stops bloating and values become queryable by column. - A familiar API. The template functions mirror what you already know, so most themes need only a find-and-replace of the function prefix.
- Full ecosystem compatibility. A postmeta mirror (on by default) keeps a plain copy of every value where exports, backups, SEO and search plugins expect it.
Step by step
-
Install Fieldstone alongside ACF
Add the free Fieldstone plugin from WordPress.org and activate it. Leave ACF active for now — nothing changes yet.
-
Open the import banner
With ACF active, Fieldstone shows an import banner on its Field Groups screen listing every ACF group it can see. Pick the groups you want to bring across.
-
Import — and read the warnings
Importing recreates each group as a Fieldstone definition and creates its storage table. The mapping is deterministic — no AI involved. Anything without a one-to-one equivalent is reported as a plain-English warning rather than silently dropped, so you know exactly what to review.
-
Copy your existing values across
The import brings your field definitions. Your content is the second click: a Values saved by ACF panel appears on the same screen, listing each imported group and how many posts, terms and users hold values for it. Press Copy values from ACF.
It only reads what ACF saved, so your ACF data is not changed. Checkboxes and multi-selects are converted; with Fieldstone Pro, so are galleries, relationships, repeaters, groups and flexible content. Values Fieldstone already holds are kept, so it is safe to run again. Clone fields and widget values are not copied. On a very large site you can run the same thing from the command line:
wp fstn acf copy-values. -
Update your theme calls
Swap the ACF function names for the Fieldstone equivalents (table below). The arguments and return shapes match, so a repeater loop or a relationship read keeps working the same way.
-
Verify, then retire ACF
Load your templates and compare each page with how it looked on ACF. Deactivate ACF only when every field you use shows its value. Because your ACF data was never modified, rolling back is just reactivating ACF.
Template function equivalents
| Advanced Custom Fields | Fieldstone |
|---|---|
get_field( 'name' ) | fstn_get_field( 'name' ) |
the_field( 'name' ) | fstn_the_field( 'name' ) escaped |
have_rows( 'repeater' ) | fstn_have_rows( 'repeater' ) |
the_row() | fstn_the_row() |
get_sub_field( 'name' ) | fstn_get_sub_field( 'name' ) |
get_row_layout() | fstn_get_row_layout() |
update_field( 'name', $v ) | fstn_update_field( 'name', $v ) |
The same repeater loop, before and after
<?php // Fieldstone — the loop you already know ?>
<?php if ( fstn_have_rows( 'team' ) ) : ?>
<?php while ( fstn_have_rows( 'team' ) ) : fstn_the_row(); ?>
<h3><?php echo esc_html( fstn_get_sub_field( 'name' ) ); ?></h3>
<?php endwhile; ?>
<?php endif; ?>
Tip: most themes migrate with a single project-wide replace of get_field( → fstn_get_field( (and the same for the other functions). Do it on a staging copy first.
What comes across
Field groups, their fields and settings, location rules and conditional logic import directly, and the values ACF saved are copied with one more click. Free ACF field types map to Fieldstone's free types; ACF Pro types (repeater, flexible content, gallery, clone, relational fields, options pages) map to Fieldstone Pro. Anything the current build can't represent is listed as a warning at import time — nothing is dropped without telling you.
Read the getting-started guide →
Need the advanced field types? See Fieldstone Pro plans — 30-day money-back guarantee, staging and development sites always free.