Мне, как разработчику сайтов, очень часто приходится этим заниматься — переносить сайты с локального и тестового серверов, а также и наоборот, создавать тестовые копии сайтов на субдоменах.
Как ни странно, каждый разработчик осуществляет перенос по-своему, есть и такие, которые вручную меняют значения в базе данных.
Что касается меня, то каждую задачу я пытаюсь максимально упростить и максимально ускорить. Поэтому вы можете пропустить теоретическую часть описания SQL-запросов и сразу перейти к инструменту, который вам сгенерирует их автоматически.
Вообще основных запросов три (на скриншоте есть и четвертый запрос, но о нем чуть позже). Итак, http://test.truemisha.ru
— старый домен, https://misha.agency
— новый.
Названия таблиц базы данных WordPress имеют префиксы. По умолчанию это wp_
, но на вашем сайте префикс может быть абсолютно каким угодно, например таблица wp_posts
у вас может называться misha_posts
или hjkpoiposts
, учтите это.
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://test.truemisha.ru', 'https://misha.agency') WHERE option_name = 'home' OR option_name = 'siteurl'; UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://test.truemisha.ru', 'https://misha.agency'); UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://test.truemisha.ru','https://misha.agency');
Для того, чтобы выполнить эти запросы, вам нужно выбрать базу данных в phpMyAdmin, перейти на вкладку SQL, вставить запросы в поле и нажать ок.
Вкратце рассмотрим каждый из запросов по отдельности.
WordPress хранит значения абсолютного URL сайта в базе данных в таблице wp_options
. Если их не поменять, то при переходе по ссылкам внутри сайта вас будет постоянно перенаправлять на старый домен.
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://test.truemisha.ru', 'https://misha.agency') 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.agency');
Не всегда нужен, но если вы лишний раз запустите этот запрос, ничего плохого не случится.
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://test.truemisha.ru','https://misha.agency');
Используются для RSS как глобальный идентификатор (больше кстати не используются нигде).
Так что же делать с guid? Тут есть два случая:
UPDATE wp_posts SET guid = REPLACE (guid, 'http://10.0.0.32', 'https://misha.agency');
UPDATE wp_posts SET guid = REPLACE (guid, 'http://test.truemisha.ru', 'https://misha.agency') WHERE post_type = 'attachment';
Вполне возможно, что в комментариях оставлялись внутренние ссылки на какие-либо посты или страницы сайта — значит для комментов тоже будет свой SQL-запрос.
UPDATE wp_comments SET comment_content = REPLACE (comment_content, 'http://test.truemisha.ru', 'https://misha.agency'); UPDATE wp_comments SET comment_author_url = REPLACE (comment_author_url, 'http://test.truemisha.ru', 'https://misha.agency');
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Все правильно расписано – сам пользуюсь таким же кодом уже несколько лет и никаких проблем при переносах не возникает.
спасибо, отличная статья прям то что искал с первого поста и нашел, что бы без вас делал даже и не знаю, очень помогло хоть и не с первого тыка, слеши то в конце нужно убирать :)
Отлично. Всё помогло, спасибо. С локалки сайт переносили на хостинг
Я бы добавил немного по опыту многократных клонирований базы данных продуктивного сайта на тестовую площадку.
Иногда (причин уже не помню, возможно, из-за каких-то плагинов) после копирования таблиц и указанных вами апдейтов бывает невозможно зайти в админку.
Выручает следующее:
update db_name.table_prefix_usermeta
set meta_key = replace(meta_key, "old_table_prefix", "new_table_prefix");
Тоже самое нужно проделать и с table_prefix_options по полю option_name:
update db_name.table_prefix_options
set option_name = replace(option_name, "old_table_prefix", "new_table_prefix");
Супер! Спасибо!
К сожалению инструмент не доступен.
Спасибо за ваш комментарий, Александр,
исправил ссылку!
Спасибо за статью! То что искала, все расписано по полочкам! И даже мне, начинающей самоучке все ясно и понятно!
Отлично! 👍
Чувак, тебе респект!
Доходчивый мануал, помогло, спасибо!
Добрый вечер! Я не понимаю,почему у меня не получается? Я меняю с одного домена на другой(с тестового на действительный).И там и там версии https.Ссылки в меню поменялись и все.А когда заходишь например в товар,там есть статья и там ссылки в статье,так там не поменялось ничего.Подскажите ,пож., почему?
Добрый вечер!
Возможно лишний слеш поставили
Нет,все правильно поставила.Нашла ответ.У меня сайт на элементоре и поэтому эти запросы не действовали.Надо было в настройках элементора сменить старый адрес на новый.Может кому пригодится.
Спасибо за информацию!
Не посмотрела, что статья написана давно, но все сработало, спасибо большое! А то я полдня с бубном проплясала))
работает но не во всем контенте, тот что переведен через WPML или создан через WPBakery - не заменяет..