Are you looking to export blog posts, pages, media library images, ACF fields, WooCommerce orders, or other custom post types from one site to another? If so, this how-to guide is for you.
Migrating WordPress websites can be a daunting task.
If you're anything like me, the fun part of building websites is creating beautiful designs and bringing them to life.
Not digging around phpMyAdmin and manipulating SQL databases.
When it comes to full website migrations, luckily there are a variety of backup & migration tools that can handle this for you in a few clicks.
Full migrations are easy these days.
But when it comes to partial website migrations, it's not as straightforward.
It requires more fine-tuning and specialized tools to make sure your data gets copied over successfully.
The good news?
There are some tools available that can help make your partial migration go a lot smoother.
In this article, I'm going to go over what these tools are and how you can use them to move content from one WordPress site to another.
Let's get started!
🚚 What is a partial website migration?
A partial website migration means exporting only some of your content.
This could be your:
- Blog posts
- Media Library images
- Custom post types
- Advanced Custom Fields data
- WooCommerce customers
- WooCommerce products
- WooCommerce orders
Or a combination of the bunch.
How to I migrate everything from one website to another?
If you're looking to create an exact clone of your website, that is what would be considered a full migration.
The process is much simpler than a partial migration, and it usually only takes a few clicks.
The top backup & migration plugins we recommend are:
For the purpose of this article though, we're only looking at partial migrations 🙂
🛠 The best tools for migrating content from one WordPress site to another
WP All Import
WP All Import claims to be the best import export plugin for WordPress & WooCommerce, and I don't think you could really argue that.
It lets you export any post type from your existing site to a CSV or XML file.
You can then make edits to data (if you want) and import it on your new site.
It's the most powerful tool on this list, and I'm not sure there's an alternative that even comes close.
It has full support for native WordPress content, users, ACF, Toolset, WooCommerce, Gravity Forms, popular SEO plugins (like Yoast & Rank Math) and more.
WP All Import feels like having a super power, and has easily saved me tens of hours on some projects.
Creating an Export with WP All Import
Once you've installed the WP All Export plugin, you'll see a new menu item appear in your WP Admin navigation.
Click "New Export" and you'll be able to choose what you'd like to export from your current site:
This step will of course highly depend on what kind of content you're looking to migrate.
For the purpose of this walk-through, I'm going to export my Posts.
The neat thing here is that you can also filter which posts get exported.
You might only want posts since a certain date, from a specific author, or that have a custom field populated.
After you're done picking your post type and filtering, you can click "Migrate Posts" and have an export file ready to go - just like that.
If you want to customize your export file though, you can definitely do that.
You can drag-and-drop to choose which fields or parameters get included:
In this example, I've chosen to include all fields. This means it'll grab all the post content, taxonomy data, attached images, author info, Rank Math settings, ACF meta data etc.
The last step before your export is complete choosing when you want it to run.
You can have it run once for a simple migration, but you also have the option for your export to run on an automated schedule.
This is really useful if you want to export your WooCommerce Orders to a spreadsheet every week - for example.
Once your export is done, you can download it as a CSV or a bundle.
If you want to manipulate any of your post data, download it as a CSV so you can quickly edit fields from inside a spreadsheet editor.
You can also check the CSV rows to make sure everything is looking good.
If you just plan on importing your export file to another website, downloading it as a bundle is easiest.
Importing Your Content
Now that you have your export file from your origin site, you're ready to import it on your second site.
First you'll need to download the WP All Import plugin.
This is where it's also a good idea to install any necessary WP All Import add-ons to make sure it all maps nicely.
From the WP Admin nav, you can click to run a New Import. Upload your export file from the previous step.
Once it's uploaded, it'll show you a preview of the rows that you're importing.
Again, this is a chance to make sure it all looks good.
Finally it's time to map your fields.
WP All Import does a great job of auto-mapping the fields for you.
There are a ton of options to control how your fields are handled when imported:
If you have any add-ons installed, this is where you can adjust those settings as well.
The last step is to make sure your Unique Identifier is set. This will identify which are new records and which are duplicates.
You can choose to skip duplicate records or have them updated with any new data from your input.
Hit Import, and you're all done!
You'll get taken to a confirmation screen that shows all the records that were created, along with a log of any errors.
Who should use WP All Import?
This example was a fairly simple migration scenario, but there's a lot you can use WP All Import for.
Some example use cases are:
- Export your blog posts, ensuring their ACF and Yoast fields remain in-tact
- Migrate pages with their Toolset relationship fields
- Export new WooCommerce orders from your live site to a staging site
- Automatically create & update WooCommerce products from a CSV file
- Bulk edit WooCommerce products
Overall, if you are doing anything more than a straightforward blog post migration, WP All Import will likely be your best option.
WordPress' Export/Import Tool
If you're looking for a simple (free) option, WordPress' actually has its own native export & import tools built-in.
But before you get too excited, you should know: it's only suitable for basic scenarios.
You can technically choose to export a specific post type, but it won't come with any attached images or custom fields.
The only way to get an export with more data is to export "All content."
The problem with this approach is that you have no choice but to copy everything over.
You can't filter by date or post type or anything else.
You need to import everything onto your website, and take the time to clean up anything you don't want.
In my experience, I've found that images aren't always perfectly linked either.
The Manual Import Approach
If you feel destined to make the WordPress Export & Import tools work for you, there is a workaround.
The process looks like:
- Export your selected post types (without attachments)
- Import your XML files on the new website
- Copy your /wp-content/uploads/ folder from the old site to the new site
- Export your attachment 'posts' from your database using phpMyAdmin
- Edit the exported SQL file to adjust for your new table prefix (if necessary)
- Import the SQL file into your new database
- Repeat steps 4-6 but for your wp_postmeta
Even if you go through all these steps, it's unlikely that everything will import as planned.
You'll also need to manually filter through which posts & images you want imported.
Who should use WordPress' export & import tools?
I would only recommend this method if you're OK with importing ALL content to your new site.
If you want to filter what gets imported, save yourself the headache and go for WP All Import instead.
Zippy is a free plugin that lets you package your pages, blog posts, and other post types as a ZIP file.
You can choose the keep the ZIP file as a backup of your posts, or import it onto another website.
Unlike the native WordPress export tool, you have a lot more control as to what gets exported.
You simply select all the posts you want exported:
Each export includes the post's content, categories, taxonomies, media/attachments, meta data and custom fields.
When importing your ZIP file on your new website, you can select what gets imported:
That's all there is to it!
Who should use Zippy?
Zippy isn't as powerful as WP All Import, but is more useful than the native WordPress export tools.
If you just need to migrate a few simple posts and are looking for a free option, Zippy is a good solution.
Thank you Sridhar Katakam for recommending Zippy to us.
🧩 Is it possible to merge WordPress databases?
If you're developing on a staging site while WooCommerce continues to take orders on your live site, you might be wondering if there's a good way to merge databases?
Unfortunately, this is an age-old problem that doesn't have a good solution right now.
The team at Delicious Brains were working on a product called Mergebot, but decided to shut it down after realizing the technical complexities involved.
They wrote a follow up article on how they approach merging databases today.
There is another product called WPMerge which looks interesting at first glance.
I've heard mixed reviews from people who've used it though, and their changelog is pretty sparse since December 2019.
It's still worth a shot in my opinion, but I would do some testing to see if it works for your use case.
Overall, there isn't a magic bullet solution for merging WordPress databases.
Note: WooCommerce is working on creating a custom orders table, which would make migrating WooCommerce Orders a lot simpler.
☁️ Closing Thoughts
That's all for this one!
Hopefully you found this article helpful in learning how to partially migrate content in WordPress.
If you have any suggestions that you think I should add to the list, definitely let me know in the comments section below.
Thanks for reading!