Migrating hundreds of WordPress blog posts from one custom field system to another can feel overwhelming. If you’re moving from Advanced Custom Fields (ACF) to JetEngine and worried about losing years of content, this step-by-step guide will walk you through the process based on our experience migrating over 300 posts for a client.

Why Simple Export/Import Won’t Work

The WordPress export/import function works perfectly for basic posts, but when your content relies on custom fields, you’ll quickly discover the limitations.

The Problem: Custom fields created in ACF won’t automatically map to JetEngine fields. Each system stores custom field data differently, so a direct import will result in:

  • Missing custom field data
  • Broken post layouts
  • Lost metadata
  • Broken internal functionality

As our developer Roshan puts it: “It’s like taking parts from a Honda car and trying to assemble them in a Mercedes — it’s not going to work.”

Screenshot of the WordPress export page, highlighting options for selecting content type, categories, authors, and date range—ideal for WordPress Posts Migration or streamlining Data Migration tasks with XML export.
WP Admin -> Tools -> Export

Why We Switched from ACF to JetEngine

Our decision to migrate wasn’t arbitrary. We encountered a critical issue with ACF and Elementor integration that forced our hand. There’s a known compatibility issue (GitHub Issue #9571) where ACF fields don’t properly populate in Elementor popups.

As Giang, our lead developer, explained: “The shortcode or custom widget we created using PHP code may work on the Single Post template, but JetPopup is unable to populate data from the custom shortcode widget when displayed in a popup (such as for a Webinar or E-book) on the frontend.”

For one of our clients being a law firm that relies heavily on content-gated resources and popup functionality, this wasn’t just an inconvenience — it was breaking core website functionality.

Step 1: Audit Your Existing Custom Fields

Before starting any migration, document everything you’re working with:

Map Your ACF Structure

  • List all custom field groups
  • Document field types (text, textarea, image, repeater, etc.)
  • Note which post types use which fields
  • Identify required vs. optional fields
  • Check for conditional logic or dependencies

Content Analysis

  • Count total posts needing migration
  • Identify posts with complex custom field structures
  • Note any posts with missing or incomplete data
  • Document media attachments linked through custom fields
Screenshot of the "Edit Field Group" page in ACF, used for WordPress data migration, showing four fields: Select Icon, Webinar Data, eBook Data, and Article Data, with Article Data selected for editing.
ACF -> Field Group
A screenshot of a web interface displaying a table of sub fields, including labels, names, and types for 11 fields—ideal for managing ACF to JetEngine migration or planning a WordPress post migration, with two “Add Field” buttons visible.
ACF -> Field Group

Step 2: Plan Your JetEngine Structure

Don’t just recreate your ACF fields in JetEngine — this is your opportunity to improve.

Design Improvements

  • Simplify overly complex field groups
  • Add new fields you’ve needed
  • Improve field organisation
  • Consider future content needs

Technical Considerations

  • Plan for better SEO integration
  • Design for improved user experience
  • Consider performance optimisation
  • Think about maintenance efficiency

In JetEngine, you can either create the Group of Meta Fields with Conditional Logic under Posts (Post Type) or have multiple Meta Boxes assigning to the Post (Post Types). In our example, we go with Multiple Meta Boxes for easy management.

Screenshot of a WordPress admin panel showing a list of post types with corresponding slugs and "Edit" action links under the JetEngine menu, ideal for those managing ACF to JetEngine or planning to migrate WordPress posts. A "Built-in" toggle appears at the top right.
Adding Meta Fields for Built-in Post (Post Type) example
A table lists four meta box names with options to edit, copy, or delete each for migrate WordPress posts. All are shown on "post." Meta box names are links in blue; actions for ACF to JetEngine migration appear in blue and red text.
Adding multiple Meta Boxes assigning to the Post (Post Types) example

Step 3: Create the Field Mapping Document

This is the most crucial step. Create a detailed mapping document that clearly shows how each ACF field maps to its corresponding JetEngine field.

When working with ACF “Group” fields, remember that the slug should be the same between the ACF field and the JetEngine field so they connect automatically. For example, if the ACF field Webinar Data is a Group type containing a subfield Author Name with the slug author_name, the stored key will be webinar_data_author_name.

In JetEngine, the matching field should also use the full slug webinar_data_author_name so the mapping works correctly.

Example Mapping Table (Post Content)

ACF Field NameACF Field TypeJetEngine Field NameJetEngine Field TypeNotes
post_subtitletextpost_subtitletextImport as-is
featured_image_credittextfeatured_image_credittextKeep same slug and value
show_in_featuredtrue/falseis_featuredcheckboxConvert boolean (true/false) to checked/unchecked
post_categoryselectcontent_categoryselectMatch category slugs between systems
reading_timenumberreading_time_minutesnumberEnsure numeric value only
webinar_data → author_namegroup → textwebinar_data_author_nametextGroup field example — JetEngine slug must include parent slug (webinar_data_author_name)

Include Migration Rules

  • How to handle missing data: Use fallback values when a field is empty.
  • Default values for new fields: Assign default categories or statuses if not provided.
  • Data transformation requirements: Convert formats (e.g., true/false to checkbox).
  • Field relationship changes: Ensure related posts or taxonomies are correctly linked.

Step 4: Set Up Your JetEngine Fields

Build your complete JetEngine structure before importing any content:

Create Meta Boxes

  • Build all custom field groups
  • Test field functionality
  • Set up conditional logic
  • Configure field relationships

Test with Sample Posts

  • Create a few test posts manually
  • Verify all fields work correctly
  • Check frontend display
  • Test any custom queries

Step 5: Prepare the Migration Environment

Backup Everything

  • Full database backup
  • Complete file system backup
  • Export existing posts separately
  • Document current site functionality

BACKUP BACKUP BACKUP – it is important and we have to repeat it 3 times

Set Up Staging / Or Development Environment

  • Work on a staging environment
  • Install necessary plugins
  • Configure JetEngine completely
  • Test basic functionality

Step 6: Export and Transform Data

Extract ACF Data

  • Export posts with custom fields
  • Use phpMyAdmin to access wp_postmeta table
  • Export custom field data separately if needed
  • Document any data inconsistencies

Transform Data Structure

  • Convert field names to match JetEngine
  • Transform data types where necessary
  • Handle missing or malformed data
  • Prepare media file references

Step 7: Execute the Migration

Import in Stages

  • Start with 10-20 posts as a test
  • Verify custom field mapping works
  • Check frontend display
  • Test search and filtering functionality

Full Migration Process

  • Import posts in batches (50-100 at a time)
  • Verify each batch before continuing
  • Update internal links and references
  • Test functionality after each batch

Step 8: Post-Migration Verification

Content Verification

  • Check random posts for missing data
  • Verify media attachments
  • Test custom field display
  • Confirm internal links work

Functionality Testing

  • Test post filtering and search
  • Verify custom queries work
  • Check page load speeds
  • Test mobile responsiveness

SEO Considerations

  • Verify meta descriptions preserved
  • Check internal link structure
  • Confirm URL structure maintained
  • Test search engine accessibility
Screenshot of the JetSmartFilters URL Structure Settings, useful for WordPress Posts Migration, showing options for taxonomy term name, URL aliases, rule settings, and input fields for setting URL aliases.
Changing the URL structure if you work with Jet Smart Filer in Crocoblock -> JetPlugins Settings -> JetSmartFilters->URL Structure Settings

Common Issues and Solutions (Real-World Problems)

Based on our actual migration experience, here are the issues you’re most likely to encounter:

Issue: Button/Link fields from ACF don’t migrate properly

Solution: JetEngine doesn’t have a direct “Link” field type. Recreate as URL fields or use JetEngine’s more flexible field options. Use WP All Export/Import to transform the data structure.

Issue: Date fields with mixed-case meta keys fail to map

Solution: JetEngine converts all meta keys to lowercase. If your ACF field was Date_Published, manually export and reimport with lowercase date_published key.

Issue: Custom PHP code doesn’t work with JetEngine popups

Solution: This is why we migrated in the first place. JetEngine’s dynamic tags work properly with Elementor popups, unlike ACF’s custom code integration.

Issue: Some fields appear to map but data is missing

Solution: Check field name matching exactly. Even small differences in field names will prevent automatic mapping.

Issue: Popup functionality breaks after migration

Solution: Replace ACF dynamic tags with JetEngine dynamic field widgets in Elementor. This solves the core compatibility issue.

Timeline Expectations

Based on our experience with 300+ posts:

  • Planning and mapping: 2-3 days
  • JetEngine setup: 1 day
  • Data preparation: 1 day
  • Migration execution: 2-4 hours
  • Testing and verification: 1-2 days

Total project time: 5-7 days for complex migrations

When to Consider Professional Help

Consider professional migration services if you have:

  • More than 500 posts to migrate
  • Complex custom field relationships
  • E-commerce integration requirements
  • Tight timeline constraints
  • Limited technical experience
  • Critical SEO considerations

Tools That Can Help (What Actually Works)

Based on our migration experience, these tools proved essential:

Essential Plugins

  • WP All Export/Import: Critical for handling fields that don’t auto-map (like Link fields and mixed-case meta keys)
  • JetEngine: Obviously required, but ensure you have the latest version for best Elementor compatibility

Development Tools

  • Elementor: Update to latest version to ensure JetPopup works properly with JetEngine
  • phpMyAdmin: For direct database inspection when troubleshooting mapping issues
  • Staging environment: Absolutely essential — test everything before touching the live site

Field Mapping Strategy

  • Use identical field names where possible for automatic mapping
  • Document which fields need manual transformation
  • Test popup functionality specifically if using Elementor popups

Key Takeaways

The most important lesson from migrating hundreds of posts: preparation time is more valuable than execution time. Spending three days on proper planning and mapping will save you weeks of troubleshooting later.

Remember that migration is an opportunity to improve your content structure, not just preserve it. Take time to enhance your custom field architecture while preserving your valuable content.


Need help with a complex WordPress migration? Our team has successfully migrated thousands of posts across various platforms and custom field systems. Contact us for a migration consultation.