SQL-запросы, необходимые для переноса сайта на WordPress на другой домен

Мне, как разработчику сайтов, очень часто приходится этим заниматься — переносить сайты с локального и тестового серверов, а также и наоборот, создавать тестовые копии сайтов на субдоменах.

Как ни странно, каждый разработчик осуществляет перенос по-своему, есть и такие, которые вручную меняют значения в базе данных.

Что касается меня, то каждую задачу я пытаюсь максимально упростить и максимально ускорить. Поэтому вы можете пропустить теоретическую часть описания SQL-запросов и сразу перейти к инструменту, который вам сгенерирует их автоматически.

Описание запросов SQL

Вообще основных запросов три (на скриншоте есть и четвертый запрос, но о нем чуть позже). Итак, http://test.truemisha.ru — старый домен, https://misha.blog — новый.

Названия таблиц базы данных WordPress имеют префиксы. По умолчанию это wp_, но на вашем сайте префикс может быть абсолютно каким угодно, например таблица wp_posts у вас может называться misha_posts или hjkpoiposts, учтите это.

UPDATE wp_options SET option_value = REPLACE(option_value, 'http://test.truemisha.ru', 'https://misha.blog') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://test.truemisha.ru', 'https://misha.blog');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://test.truemisha.ru','https://misha.blog');

Для того, чтобы выполнить эти запросы, вам нужно выбрать базу данных в phpMyAdmin, перейти на вкладку SQL, вставить запросы в поле и нажать ок.

Вставляем запросы во вкладке SQL в phpMyAdmin

Вкратце рассмотрим каждый из запросов по отдельности.

Замена site_url и home_url

WordPress хранит значения абсолютного URL сайта в базе данных в таблице wp_options. Если их не поменять, то при переходе по ссылкам внутри сайта вас будет постоянно перенаправлять на старый домен.

UPDATE wp_options SET option_value = REPLACE(option_value, 'http://test.truemisha.ru', 'https://misha.blog') WHERE option_name = 'home' OR option_name = 'siteurl';

Поиск и замена в содержимом постов

Тут всё понятно — все ссылки и изображения в содержимом постов WordPress имеют абсолютные URL, а значит — меняем.

UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://test.truemisha.ru', 'https://misha.blog');

Значения произвольных полей постов

Не всегда нужен, но если вы лишний раз запустите этот запрос, ничего плохого не случится.

UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://test.truemisha.ru','https://misha.blog');

Для чего нужны guid?

Используются для RSS как глобальный идентификатор (больше кстати не используются нигде).

колонка guid в таблице wp_posts

Так что же делать с guid? Тут есть два случая:

  • Если вы переносите сайт с локального сервера — меняем все значения guid:
    UPDATE wp_posts SET guid = REPLACE (guid, 'http://10.0.0.32', 'https://misha.blog');
  • Если же сайт уже находился в интернете, а вы просто решили поменять домен — меняем guid только для вложений:
    UPDATE wp_posts SET guid = REPLACE (guid, 'http://test.truemisha.ru', 'https://misha.blog') WHERE post_type = 'attachment';

Ссылки в комментариях

Вполне возможно, что в комментариях оставлялись внутренние ссылки на какие-либо посты или страницы сайта — значит для комментов тоже будет свой SQL-запрос.

UPDATE wp_comments SET comment_content = REPLACE (comment_content, 'http://test.truemisha.ru', 'https://misha.blog');
UPDATE wp_comments SET comment_author_url = REPLACE (comment_author_url, 'http://test.truemisha.ru', 'https://misha.blog');
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

Ещё посты про базы данных в WordPress