Description
MigrateMate moves a WordPress site, or any part of one, to another WordPress site. You pick what to move, click once, and it arrives on the other side complete: images downloaded and re-attached, post IDs remapped, internal links rewritten to the new domain, and every relationship intact.
Because both ends are WordPress, there is no field mapping to configure. ACF repeaters, WooCommerce variations, taxonomy hierarchies, navigation menus and SEO meta all map themselves.
Full Site Migration
One bundle carries the whole site:
- Every post of the selected type(s) — pages, posts, products, and any custom post type
- All media referenced by that content, deduplicated across the bundle
- Navigation menus, with items re-linked on the destination
- The complete taxonomy and term tree, including terms not currently in use
- ACF Options Page fields (site-wide and global data)
- Site settings: title, tagline, front page and posts page, permalink structure, reading, discussion, media and date settings
- Widgets: every widget instance and its sidebar placement
Each of those is a separate opt-in checkbox at import time, so you can take the content and leave the settings, or vice versa.
Bulk bundle export
- Export any number of posts into one ZIP — 10 or 10,000
- “Export ALL as Bundle” — an entire post type in one click
- Staged processing with live progress: a few items per request, so no request ever runs long enough to time out
- Media deduplicated across the whole bundle — a shared image is stored once
Bulk bundle import
- Upload a bundle ZIP and see every item listed, with a conflict check, before anything is written
- Three import modes: override existing (update in place, matched by slug or SKU), skip existing, or always create new
- One item per request — no timeouts on large imports
- Per-item live results: imported, updated, skipped or failed, each with a link to the result
Direct site-to-site migration
- No ZIP needed — content moves server to server over an authenticated REST endpoint
- Bulk queue with per-item retry
- Conflict preflight before anything is written
CSV export and import & Cross-Platform Migration
- Migrate blog content from any CMS or platform: Import CSV exports directly from Shopify, Wix, Squarespace, Ghost, Medium, Webflow, Blogger, or custom CMS platforms straight into WordPress posts or CPTs.
- Auto-Header Matching: Automatically detects platform headers (
Handle,Body,HTML,Cover Image,Tags,Categories,Author,Date, etc.) and maps them to WordPress fields. - Featured Image Auto-Sideloading: Featured Image URLs in CSVs are automatically downloaded, saved to the Media Library, and attached to imported posts.
- Spreadsheet-style bulk editing: Export posts, pages, or custom post types to CSV for quick bulk updates in Excel or Google Sheets.
- Column picker & suggested mapping: Select standard fields, taxonomies, ACF fields, or any plugin meta, with suggested mapping on import.
- Correct CSV escaping throughout, and formula-injection protection on export.
What travels with every post
- Full content, excerpt, status, hierarchy (parent resolved by slug), menu order, publish date and author
- Every image: content images, galleries, featured image, srcset variants, Gutenberg block IDs
- ACF: field groups and values — repeaters, flexible content, galleries, relationships
- WooCommerce: pricing, stock, attributes, variations, product gallery, SKU matching
- All taxonomies, with parent and child hierarchy preserved
- SEO meta: Yoast, Rank Math, SEOPress and AIOSEO, including OG and Twitter image remapping
- The page-template assignment
- Automatic old-URL to new-URL replacement in content and in every meta value
What MigrateMate deliberately does not do
Being explicit about the boundaries, because they are design decisions rather than gaps:
- It does not write files into your theme or plugins. Page-template assignments migrate; template files do not. A template file is executable PHP owned by your theme, and anything a plugin writes into a theme folder is lost on the next theme update. If the destination theme lacks a template, the import still succeeds and the report names the file to add.
- It does not change your active theme, or install themes or plugins. A theme difference between the two sites is reported, never forced.
- It does not copy credentials. API keys, licence keys, SMTP passwords and payment gateway secrets are excluded from every export, so they never end up inside a bundle ZIP.
- It does not touch your site address or admin email, which would take the destination site offline or lock you out.
- It is not a backup tool. It does not copy the database wholesale or move the WordPress installation itself.
Built to your host’s limits, not around them
MigrateMate never changes your server’s PHP configuration. It does not raise memory_limit, does not extend max_execution_time, and does not alter output compression. Instead every long operation is split into small batches driven one request at a time, so a site with modest PHP limits can still migrate tens of thousands of items.
Where MigrateMate stores files
Temporary bundles and CSV files are written to a single folder inside your uploads directory, resolved at runtime with wp_upload_dir() — never a hard-coded path, and never inside wp-content, the plugin folder, a theme, or WordPress core. The folder denies direct HTTP access, downloads are served through an authenticated and nonce-checked endpoint, and files are deleted once delivered. Deleting the plugin removes the folder and every option it created.
WP-CLI
wp migratemate export --all [--type=product] [--output=/tmp/site.zip]wp migratemate export --ids=12,15,88wp migratemate import bundle.zip [--mode=new|override|skip] [--menus] [--no-sideload]
Safety
- Nothing is overwritten without an explicit opt-in
- Migration reports log every image, field and mapping for every run
- API key authentication using
hash_equals(), and header-only auth so a key cannot leak through access logs - SSRF protection on every outbound request: a destination host that resolves to a private or reserved address is refused
- Uploaded bundles are validated entry by entry against the expected layout — an archive containing a PHP file, a traversal path, or an unexpected folder is rejected rather than extracted
- Meta blocklist prevents sensitive capability keys from being imported
Screenshots



Installation
- Install and activate MigrateMate on both sites, the source and the destination.
- ZIP flow: on the source site go to MigrateMate Export, select your items, and click “Bundle ZIP”. On the destination site go to MigrateMate Import, upload the ZIP, choose an import mode, and click “Import All”.
- Direct flow: copy the API key from the destination site (MigrateMate Settings). On the source site click “Direct” on any row, or select several items and click “Direct Migrate Selected”.
- Full site: on the source site use “Export ALL as Bundle”. On import, tick the site settings, widgets, menus and taxonomy options you want applied.
Requires the PHP zip extension for ZIP-based migration. Direct site-to-site migration and CSV import/export work without it.
FAQ
-
Does it overwrite my existing content?
-
Only if you choose “Override existing”. The preview shows exactly what already exists before anything is written, and the “Skip existing” and “Always create new” modes never modify an existing post.
-
Do I need to map fields the way CSV importers require?
-
Not for ZIP or direct migration. Both ends are WordPress, so post fields, meta, ACF and WooCommerce data map automatically. The CSV path does offer column mapping, because a spreadsheet has no inherent field structure — and it suggests the mapping for you.
-
Are images transferred?
-
Yes. Images are fetched from the source URL first; if the source is not publicly reachable they are read from the bundle instead. Media that already exists on the destination is detected and reused rather than duplicated.
-
Does it work with custom post types?
-
Yes. Every registered public post type is supported automatically, and you can migrate content into a different post type on the destination — for example importing blog posts as a “Case Study” CPT — with taxonomy mapping to match.
-
Does it migrate site settings and widgets?
-
Yes, as an opt-in part of a full site migration: site title and tagline, front page and posts page, permalink structure, reading, discussion, media and date settings, plus every widget and its placement. Your site address, admin email, active theme and active plugins are never changed.
-
Does it migrate users?
-
Not as a user list. Post authorship does migrate: an author is matched on the destination by email, then login, then display name. If no match exists, MigrateMate can create a least-privilege “Author” account so the correct byline appears — a per-import checkbox you can switch off.
-
Does it migrate my theme?
-
No. MigrateMate migrates content and configuration, not theme or plugin files. Activate the same theme on the destination before importing; if the themes differ, the import still completes and the report explains what to expect.
-
Will it work on my host?
-
It is built for restrictive hosting. It never changes PHP limits, writes only inside your uploads folder, and uses the WordPress filesystem API so hosts using FTP or SSH transports work normally.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“MigrateMate – Bulk Content Migration, Import and Export” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “MigrateMate – Bulk Content Migration, Import and Export” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.0
- Initial release on WordPress.org.
- Full Site Migration: content, media, menus, the complete taxonomy tree, ACF Options Pages, site settings and widgets, each opt-in at import time.
- Cross-Platform Blog Migration via CSV: auto-header matching for Shopify, Wix, Squarespace, Ghost, Medium, Webflow, Blogger, and custom CMS.
- Featured Image Auto-Sideloading: downloads image URLs from CSV and attaches as WordPress featured images.
- Bulk bundle export and import, staged so no single request runs long enough to time out.
- Import modes: override existing, skip existing, always create new.
- Direct site-to-site migration over an authenticated REST endpoint, with conflict preflight.
- CSV export and import with a column picker, suggested mapping, correct escaping and formula-injection protection.
- Post type override with taxonomy mapping — migrate content into a different destination post type.
- Category and term filtering on export.
- Full ACF, WooCommerce, taxonomy, media and SEO meta support.
- Author migration with optional least-privilege account creation on the destination.
- Migration reports for every run.
- WP-CLI commands:
wp migratemate exportandwp migratemate import.
