The built-in XML import and export is often overlooked, and for good reasons. It’s not meant to migrate an entire website. It won’t migrate anything from the customizer, menus or widgets. What it does handle is migrating page and post content. It works well in situations where you want to pull in an existing blog into a brand new WordPress site.
Even in ideal situations importing feel a bit glitchy.
In order to successfully import content with images the original website needs to be healthy and accessible. Then there is dealing with errors relating to author accounts not being in sync between the two websites. Lastly, large imports tends to fail to due limitation of PHP. That’s pretty much any blog with images.
The solution is to use XML import over WP-CLI.
Using XML import over WP-CLI is significantly better. With the command line you have direct access to the server. That means large imports will run much faster and successfully complete. Since imports can easily take hours to run I highly recommend using
screen -R to start it as a background process.
wp import wordpress.2020-04-14.000.xml --authors=usermap.csv
If you can use the argument
--authors=create then do. However that option can fail. The workaround is to define a user mappings CSV file which helps keep the importing from failing. Here is a sample of what that CSV file looks like.
old_user_login,new_user_login randomuser1,anchorhost randomuser2,anchorhost oldsiteadmin,anchorhost
For a website with many users, creating the author’s CSV can be tricky.
However a few smart CLI commands can significantly help. You can extract a unique list of authors from the XML file then manually create a CSV.
# Scan XML file for authors authors=$( grep -Po "(?<=<dc:creator>).*(?=</dc:creator>)" wordpress.2020-04-14.000.xml ) # Print out unique list of authors php -r "\$items = \"$authors\"; \$array = explode(\"\n\", \$items ); echo implode( array_unique( \$array ), \"\n\" );"
Take that unique list and put it into a two column Google spreadsheet with columns
new_user_login. Make any manual mapping changes then export as a CSV file.