Часто, при работе с контекстной рекламой для малого бизнеса, есть необходимость быстро перекидывать сайт WordPress c хостинга на хостинг или делать копию сайта на текущем хостинге, со сменой доменного имени.
На первый взгляд простая задача, ибо в интернете «куча» материалов на эту тему. Но в них либо технически сложно, либо семантически непонятно, либо с ошибками, либо информация неполная.

Простой алгоритм переноса (без танцев с бубнами) выглядит так

  1. Копируем файлы и базу данных текущего сайта
  2. Переносим их (файлы и БД) на новый хостинг или меняем домен на текущем хостинге, например с otkuda.ru на kuda.ru
  3. Меняем через SQL запрос в БД otkuda.ru на kuda.ru
  4. Меняем в админке ВП домен на kuda.ru
  5. Проверяем, чтобы префикс таблиц базы данных был одинаковый на новом и старом сайте, если отличается, то лучше поменять в файле wp-config.php нового сайта на новый префикс, например на ws_ (вместо wp_)
  6. Подключаем ssl сертификат
  7. Проверяем версию php нового хостинга (должны быть такая же как на старом сайте)
  8. Меняем в таблице wp_site (либо wp_blogs) домены всех сайтов на новые ручками, если сайтов конечно не 50 штук.
  9. Сайт работает, используем для работы

SQL запрос замены домена для обычного WordPress сайта:

UPDATE wp_options SET option_value = REPLACE(option_value, 'https://otkuda.ru', 'https://kuda.ru') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'https://otkuda.ru','https://kuda.ru');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://otkuda.ru', 'https://kuda.ru');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'https://otkuda.ru','https://kuda.ru');

SQL запрос замены домена для мульти сайта WordPress (когда с одной папки и БД подгружаются несколько сайтов — делаем для каждого домена отдельно:

UPDATE wp_1_options SET option_value = REPLACE(option_value, 'https://otkuda1.ru', 'https://kuda1.ru') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_1_posts SET guid = replace(guid, 'https://otkuda1.ru','https://kuda1.ru');
UPDATE wp_1_posts SET post_content = REPLACE (post_content, 'https://otkuda1.ru', 'https://kuda1.ru');
UPDATE wp_1_postmeta SET meta_value = REPLACE (meta_value, 'https://otkuda1.ru','https://kuda1.ru');

UPDATE wp_2_options SET option_value = REPLACE(option_value, 'https://otkuda2.ru', 'https://kuda2.ru') WHERE option_name = 'home' OR option_name = 'siteurl';</span>
<pre>UPDATE wp_2_posts SET guid = replace(guid, 'https://otkuda2.ru','https://kuda2.ru');
UPDATE wp_2_posts SET post_content = REPLACE (post_content, 'https://otkuda2.ru', 'https://kuda2.ru');
UPDATE wp_2_postmeta SET meta_value = REPLACE (meta_value, 'https://otkuda2.ru','https://kuda2.ru');

UPDATE wp_3_options SET option_value = REPLACE(option_value, 'https://otkuda3.ru', 'https://kuda3.ru') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_3_posts SET guid = replace(guid, 'https://otkuda3.ru','https://kuda3.ru');
UPDATE wp_3_posts SET post_content = REPLACE (post_content, 'https://otkuda3.ru', 'https://kuda3.ru');
UPDATE wp_3_postmeta SET meta_value = REPLACE (meta_value, 'https://otkuda3.ru','https://kuda3.ru');

и далее по всем сайтам.

Возможные трудности:

  • не замена всех доменов, так как скрипты выше меняют домены с https протоколом, забывая, что могу встречаться домен в БД и с http протоколом и вообще без протокола
  • поэтому проверяем, и выполняем скрипты с http протоколом и без протокола
  • могут быть трудности с путями в картинкам, если пути, где лежат картинки старого и нового сайта отличаются