This post was made after a very intense session of 6 hours trying, without luck, to export a wp multisite site using the WordPress tools and plugins. So I decided to do it manually like a real man.
Well, now follow the steps below to extract a subsite from a Multisite Installation:
1 – Identifying the wp multisite’s subsite
- Go to your WordPress network admin dashboard (https://example.com/wp-admin/network).
- Go to ‘Sites‘.
- Click in the site you want to export.
- See the URL in your browser (https://example.com/wp-admin/network/site-info.php?id=3).
The site ID is 3.
2 – Export the wp multisite database
- Install the plugin ‘Adminer‘.
- Go to ‘Tools » Adminer‘.
- Click in ‘Start Adminer inside‘.
- Go to ‘Export‘.
- Deselect all the tables and select only the ones starting with ‘wp_3_‘.
- Select ‘wp_usermeta‘ and ‘wp_users‘.
- Click in the button ‘Export‘.
3 – Edit the *.sql file
- Open the downloaded sql file with your favourite code editor.
- Find and replace ‘/uploads/sites/3/‘ with ‘/uploads/‘.
- Find and replace the URL of the old subsite with the new URL for the single site.
- If you think you need to find and replace something else to fit your new installation, this is the moment.
4 – Upload the *.sql file
- Create a new database in your server as usual for a new WordPress site.
- Import the modified sql of the last stage.
- Perform the following SQL Query:
-- delete any usermeta specific to the other subsites
DELETE
FROM wp_usermeta
WHERE meta_key REGEXP '^wp_([0-9]+)_';
-- duplicate the wp_usermeta structure in a working data table,
-- but add a unique index for filtering out duplicates
CREATE TABLE _fix_usermeta LIKE wp_usermeta;
ALTER TABLE _fix_usermeta ADD UNIQUE (user_id, meta_key);
-- copy the site-specific usermeta, keeping only the last of each duplicate
INSERT INTO _fix_usermeta SELECT * FROM wp_usermeta
WHERE meta_key LIKE 'wp\_%'
ORDER BY user_id, meta_key, umeta_id
ON duplicate KEY
UPDATE umeta_id=
VALUES (umeta_id), meta_value=
VALUES (meta_value);
-- remove the first of each duplicate
DELETE
FROM wp_usermeta
WHERE meta_key LIKE 'wp\_%'
AND NOT EXISTS(SELECT * FROM _fix_usermeta WHERE umeta_id = wp_usermeta.umeta_id);
-- remove that working data table
DROP TABLE _fix_usermeta;
5 – Prepare the file structure for the new site
- Download and copy the files for a new WordPress installation.
- Copy all the plugins and themes folders from the Multisite to the new site.
- Copy ‘/media/sites/3‘ to ‘/wp-content/uploads‘ in the new site.
6 – Et voilà!
- Enter in your new site dashboard and check everything works good.
- Finished!