Как изменить все GUID в таблице постов WordPress?
Для улучшения предыдущих ответов вам следует обновить все соответствующие таблицы (префикс таблицы здесь wp_):
UPDATE `wp_posts` SET guid = REPLACE(guid, 'oldsiteurl', 'newsiteurl') WHERE guid LIKE 'oldsiteurl%';
UPDATE `wp_postmeta` SET meta_value = REPLACE(meta_value, 'oldsiteurl', 'newsiteurl') WHERE meta_value LIKE 'oldsiteurl%';
UPDATE `wp_options` SET option_value = REPLACE(option_value, 'oldsiteurl', 'newsiteurl') WHERE option_value LIKE 'oldsiteurl%';
Если у вас есть плагины, которые делают редиректы, вам также следует изменить постоянные ссылки там:
UPDATE `wp_redirection_404` SET url = REPLACE(url, 'oldsiteurl', 'newsiteurl') WHERE url LIKE 'oldsiteurl%';

будьте предельно осторожны при замене в таблицах wp_postmeta
и wp_options
... часто в этих таблицах хранятся сериализованные данные, и если "oldsiteurl" и "newsiteurl" имеют разную длину строки, вы повредите эти поля.

Да, @farinspace абсолютно прав, никогда не делайте автоматическое обновление в wp_postmeta и wp_options. Вам нужно обновлять эти таблицы вручную и, при необходимости, редактировать сериализованные строки с помощью соответствующего редактора https://serializededitor.com/

Используйте WP-CLI для поиска и замены. Плагин MigrateDB также имеет функцию поиска и замены при экспорте для следующего переноса данных.

Я забыл, что несколько лет назад написал генератор SQL именно для этой задачи:
https://farinspace.github.io/wp-migrate-gen/
По сути, соответствующий SQL выглядит следующим образом:
UPDATE `wp_options` SET `option_value` = REPLACE(`option_value`, 'a', 'b') WHERE `option_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, 'a', 'b');
UPDATE `wp_posts` SET `post_excerpt` = REPLACE(`post_excerpt`, 'a', 'b');
UPDATE `wp_posts` SET `guid` = REPLACE(`guid`, 'a', 'b');
UPDATE `wp_comments` SET `comment_author_url` = REPLACE(`comment_author_url`, 'a', 'b');
UPDATE `wp_comments` SET `comment_content` = REPLACE(`comment_content`, 'a', 'b');
UPDATE `wp_links` SET `link_url` = REPLACE(`link_url`, 'a', 'b');
UPDATE `wp_postmeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_usermeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_termmeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_commentmeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
Вышеуказанные запросы будут проверять и пропускать сериализованные данные PHP.
Используя генератор, вы можете отключить опцию "пропускать сериализованные данные", если длины старой и новой строк совпадают.
ПРЕДУПРЕЖДЕНИЕ: Я настоятельно рекомендую всегда создавать резервную копию ваших данных перед выполнением любых запросов, которые добавляют/удаляют/обновляют содержимое.

Документация WordPress предупреждает о изменении записей guid в базе данных WP: "Крайне важно, чтобы вы НЕ изменяли содержимое этого поля."
https://wordpress.org/support/article/changing-the-site-url/#important-guid-note

Но когда предыдущий домен был localhost
, буква U в GUID не совсем уместна. :)

Как указано в документации WordPress, когда GUID используется, например, ридерами лент для идентификации уникального контента, домен в GUID не имеет значения. Не следует его менять, если вы не хотите, чтобы ридеры лент рассматривали все изменённые GUID как 'новые'. Но когда вы переходите с 'localhost' на другой домен, ридеры лент, вероятно, не ваша основная забота... ;-)

Как вы упомянули, есть несколько переменных, которые необходимо изменить для обновления URL на вашем сайте WordPress.
- Скачайте скрипт для поиска и замены в базе данных Interconnect IT здесь
- Разархивируйте файл и поместите папку на ваш рабочий сервер в корневую директорию WordPress, затем переименуйте папку в
replace
(скриншот) - Перейдите в новую папку через браузер (например:
http://web.site/replace
) и вы увидите инструмент поиска/замены - Дальше всё довольно интуитивно понятно: введите старый URL в поле
search for…
и новый URL в полеreplace with…
Вы можете нажать кнопку dry run в разделе actions, чтобы увидеть, какие изменения будут сделаны перед выполнением скрипта. После завершения не забудьте удалить папку /replace/
.

Я регулярно переношу сайты на WordPress и вот что я использую.
Если кому-то интересно, я делаю две операции поиска и замены. Первая - заменить все старые домены на новые. Вторая - принудительно включить SSL.
- Заменить
olddomain.com
наnewdomain.com
- Включить regex, заменить
https?:\/\/([\w-]*\.|)newdomain\.com
наhttps://$1newdomain.com
. Это регулярное выражение поддерживает поддомены.
Как всегда, сначала выполните пробный запуск и проверьте несколько результатов.
