Skip to content

Instantly share code, notes, and snippets.

@lsemenenko
Created January 29, 2020 05:59
Show Gist options
  • Save lsemenenko/ff028edfcde36bf05cbdd9368d5ddb41 to your computer and use it in GitHub Desktop.
Save lsemenenko/ff028edfcde36bf05cbdd9368d5ddb41 to your computer and use it in GitHub Desktop.
WordPress: Merge existing single site into existing multisite installation
#!/usr/bin/env bash
#
# This is a rudimentary script to merge wordpress single site into existing multisite
#
site1_directory="" # path to single site installation. example: /sites/google.com/public
site2_directory="" # path to new multisite installation.
new_blog_id="" # the new blog id
cd ${site1_directory} && \
mkdir -p wp-content/sites/${new_blog_id} && \
rsync -rvzh wp-content/uploads/ wp-content/sites/${new_blog_id} && \
export_file=$(wp db export --porcelain --allow-root) && \
sed -i "s|\`wp_|\`wp_${new_blog_id}_|g" ${export_file} && \
sed -i "s|'wp_|'wp_${new_blog_id}_|g" ${export_file} && \
tar -C ${site1_directory} -czvf original.tar.gz wp-content/plugins/ wp-content/themes/ wp-content/sites/${new_blog_id}/ ${export_file}
cd ${site2_directory} && \
tar -C ${site2_directory} -zxvf original.tar.gz && \
wp db import ${export_file} --allow-root && \
database_name=$(cat wp-config.php | grep DB_NAME | awk -F"'" '{print $4}')
mysql -e "
SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
USE ${database_name};
ALTER TABLE wp_users ADD COLUMN old_user_id bigint(20) unsigned;
INSERT INTO wp_users (user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name, old_user_id)
SELECT u2.user_login, u2.user_pass, u2.user_nicename, u2.user_email, u2.user_url, u2.user_registered, u2.user_activation_key, u2.user_status, u2.display_name, u2.id
FROM wp_${new_blog_id}_users AS u2;
INSERT INTO wp_usermeta (user_id, meta_key, meta_value)
SELECT u.id, m2.meta_key, m2.meta_value
FROM wp_${new_blog_id}_usermeta AS m2
JOIN wp_users AS u ON m2.user_id = u.old_user_id;
UPDATE wp_${new_blog_id}_posts, wp_users
SET wp_${new_blog_id}_posts.post_author = wp_users.id
WHERE wp_${new_blog_id}_posts.post_author = wp_users.old_user_id;
UPDATE wp_${new_blog_id}_comments, wp_users
SET wp_${new_blog_id}_comments.user_id = wp_users.id
WHERE wp_${new_blog_id}_comments.user_id = wp_users.old_user_id;
ALTER TABLE wp_users
DROP COLUMN old_user_id;
" && \
rm ./${export_file} && \
rm -r wp-content/sites
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment