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.

Safe by design. Importing copies your ACF definitions into Fieldstone and builds its own storage. Your ACF plugin, its field groups and its data are left exactly as they are, so you can run both side by side and switch over only when you are happy.

Why teams switch

Step by step

  1. Install Fieldstone alongside ACF

    Add the free Fieldstone plugin from WordPress.org and activate it. Leave ACF active for now — nothing changes yet.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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 FieldsFieldstone
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.

← Documentation Fieldstone vs ACF →