How do I migrate WordPress with advanced features?
Beyond a basic WXR import: what happens to ACF fields, custom post types, multisite and WPML/Polylang content when you move to VeloCMS.
Basic WordPress-to-VeloCMS migration (WXR export → import) is covered in the main WordPress migration guide. This article is for the harder cases: sites that have grown over years and accumulated ACF custom fields, custom post types, multisite networks, or multilingual plugins like WPML and Polylang. None of these are impossible — they just need a more methodical approach.
ACF custom fields
Advanced Custom Fields (ACF) adds arbitrary key-value data to WordPress posts and pages. VeloCMS doesn't have an ACF equivalent out of the box — the post model has a structured set of fields (title, body, excerpt, featured image, tags, author, published_at) and no free-form custom-field storage, so ACF values are not imported. If you need them, export your ACF fields via WXR (they export as post meta), then write a small script that reads the WXR XML and adds the values you care about to each post's body through the API (PATCH /api/v1/posts).
# Export WXR with post meta (includes ACF data)
# In WordPress admin: Tools → Export → All content → Download Export File
# The .xml WXR file will contain <wp:postmeta> blocks for each ACF field
# Example structure in WXR:
# <wp:postmeta>
# <wp:meta_key>acf_hero_subtitle</wp:meta_key>
# <wp:meta_value>My Hero Subtitle</wp:meta_value>
# </wp:postmeta>Custom post types
WordPress plugins like Custom Post Type UI create post types like 'recipes', 'case-studies', 'events', etc. VeloCMS currently has a single post type with tags for categorisation, and the importer does not import entries of other post types: they are skipped, and the wizard tells you how many. The pragmatic approach is to keep your WXR file, then re-create the entries you want as VeloCMS posts (by hand or through POST /api/v1/posts) with a tag matching the original type name (e.g. tag: recipe). Fields beyond the standard post model have nowhere to live, so put anything you need to keep into the post body.
VeloCMS does not have custom post types today. If custom post type support is critical to your migration, tell us at feedback.velocms.org before you commit, or migrate a copy of your site first to see how it looks.
WordPress Multisite
WordPress Multisite runs multiple sites in a single WP installation, each with its own database prefix. VeloCMS handles multi-blog via true multi-tenancy — each blog is a separate VeloCMS tenant. The migration process: export each subsite individually as a separate WXR file, create a separate VeloCMS blog for each one, and import them independently. If the subsites share users, recreate user accounts on each relevant VeloCMS tenant.
- In WordPress Multisite, go to Network Admin → Sites → [Site Name] → Export.
- Export each subsite separately. WXR files are per-site.
- Create one VeloCMS account per blog owner or use the team members feature if one person manages multiple blogs.
- Custom domains per subsite carry over to VeloCMS custom domains (Pro plan and above).
WPML and Polylang multilingual sites
WPML and Polylang store translations as separate posts linked by a relationship meta field. When you export WXR, translations export as separate posts with the original-language post ID stored in a meta field. VeloCMS supports multilingual content at the post level via language tags. The import path: export your primary language as a standard WXR, import it, then export each translated language and import it as a second batch with a language tag (e.g. 'lang:tr' for Turkish). Linking posts to their translations is a manual step post-import — automatic translation relationship linking from WPML is not yet supported.
Membership and WooCommerce users
WooCommerce customer data is stored in WordPress's wp_users table and wp_usermeta. Export customer emails and order data via WooCommerce → Reports → Export. For blog members (email subscribers), export them from your email plugin (Mailchimp, ConvertKit integration, or custom subscription table) as a CSV and import to VeloCMS Members. WooCommerce orders and products need to be recreated in VeloCMS's product catalog — there's no WooCommerce product import yet.
The big picture: what to do first
- Audit your WordPress plugins list and categorise them: content (can migrate), functionality (needs VeloCMS equivalent or custom build), SEO (VeloCMS has built-in SEO — mostly replaceable).
- Export and import your standard posts first. Get the basics working.
- Deal with custom post types and ACF fields after base content is live.
- Handle users and members last, just before DNS cutover.
- Keep WordPress live on its original URL for at least 30 days after cutover in case you need to reference something.
Frequently asked questions
- Can VeloCMS import ACF fields automatically? No — the importer maps standard post fields only, and VeloCMS has no custom-field storage for ACF values. If you need them, a small script can read them from the WXR and add them to the post body through the API.
- What happens to my WordPress plugins after migration? The article 'What happens to my WordPress plugins after migration?' covers this in detail — check the help center.
- How long does an advanced WordPress migration take? For a multisite with ACF, budget 1–3 days of technical work depending on customisation depth.
- Can I hire someone to do this for me? There's no formal migration-partner directory today — email [email protected] describing your setup (multisite, ACF, plugin count) and the team can point you to an agency or scope the work directly.
- What about WooCommerce? There is no WooCommerce import today: products, customers and orders are not imported, and the wizard does not pick them up.