Как изменить все GUID в таблице постов WordPress?

8 дек. 2015 г., 14:35:15
Просмотры: 41.5K
Голосов: 10

Недавно я перенес свой WordPress с тестового сервера на боевой. Я заметил, что мне нужно изменить все "guid" на URL-адреса реального домена. Существует ли MySQL-запрос или простая функция, чтобы легко это изменить.

7
Комментарии

Посмотрите эту страницу, внизу блока изменения URL вы найдете названия некоторых плагинов. :)

Mayeenul Islam Mayeenul Islam
8 дек. 2015 г. 14:53:01

Спасибо. Но я хочу изменить только GUID. Остальное я сделал вручную. Я думал, есть какой-то MySQL запрос для этого

Kvvaradha Kvvaradha
8 дек. 2015 г. 15:11:05

Жаль, что WordPress встраивает URL в GUID. Это не URL. Вам не нужно их менять (или большинство из них). Смотрите: http://wordpress.stackexchange.com/a/90209/21376

s_ha_dum s_ha_dum
8 дек. 2015 г. 16:08:10

@s_ha_dum. Значит, не нужно ничего менять, верно?

Kvvaradha Kvvaradha
8 дек. 2015 г. 16:18:33

Скорее всего, нет, @Kvvaradha. Вы можете изменить их, если сайт еще не развернут, и тогда это не вызовет проблем. Но сомневаюсь, что изменения действительно необходимы.

s_ha_dum s_ha_dum
8 дек. 2015 г. 16:21:26

Этот вопрос решен?

Ethan Rævan Ethan Rævan
13 сент. 2016 г. 06:03:03

@O'Sullivan Я не вносил никаких изменений в guid. И сайт работает нормально. Так что проблема решена без внесения изменений в запросы.

Kvvaradha Kvvaradha
13 сент. 2016 г. 19:29:02
Показать остальные 2 комментариев
Все ответы на вопрос 6
0
26

Это должно выглядеть примерно так:

UPDATE wp_posts SET guid = REPLACE(guid, 'oldurl.com', 'newurl.com') WHERE guid LIKE 'http://oldurl.com/%';
  • oldurl.com - Старый URL, указанный в настройках WordPress > Общие настройки
  • newurl.com - Новый URL
3 сент. 2016 г. 16:18:51
3

Для улучшения предыдущих ответов вам следует обновить все соответствующие таблицы (префикс таблицы здесь 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%';
9 мар. 2020 г. 15:04:39
Комментарии

Звучит отлично, этот ответ поможет новичкам

Kvvaradha Kvvaradha
11 мар. 2020 г. 06:15:32

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

farinspace farinspace
11 июн. 2020 г. 18:50:50

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

Jackie Degl'Innocenti Jackie Degl'Innocenti
20 сент. 2020 г. 21:15:59
2

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

8 дек. 2015 г. 21:58:01
Комментарии

Дайте мне проверить это

Kvvaradha Kvvaradha
9 дек. 2015 г. 02:59:47

Вам повезло с этим?

jgraup jgraup
11 дек. 2015 г. 00:05:57
0

Я забыл, что несколько лет назад написал генератор 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.

Используя генератор, вы можете отключить опцию "пропускать сериализованные данные", если длины старой и новой строк совпадают.

ПРЕДУПРЕЖДЕНИЕ: Я настоятельно рекомендую всегда создавать резервную копию ваших данных перед выполнением любых запросов, которые добавляют/удаляют/обновляют содержимое.

24 сент. 2020 г. 21:49:15
2

Документация WordPress предупреждает о изменении записей guid в базе данных WP: "Крайне важно, чтобы вы НЕ изменяли содержимое этого поля."

https://wordpress.org/support/article/changing-the-site-url/#important-guid-note

25 июн. 2020 г. 15:30:49
Комментарии

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

fuxia fuxia
25 июн. 2020 г. 22:40:58

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

user2186232 user2186232
27 июн. 2020 г. 15:29:30
1

Как вы упомянули, есть несколько переменных, которые необходимо изменить для обновления URL на вашем сайте WordPress.

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

Вы можете нажать кнопку dry run в разделе actions, чтобы увидеть, какие изменения будут сделаны перед выполнением скрипта. После завершения не забудьте удалить папку /replace/.

3 сент. 2016 г. 16:37:09
Комментарии

Я регулярно переношу сайты на WordPress и вот что я использую.

Если кому-то интересно, я делаю две операции поиска и замены. Первая - заменить все старые домены на новые. Вторая - принудительно включить SSL.

  1. Заменить olddomain.com на newdomain.com
  2. Включить regex, заменить https?:\/\/([\w-]*\.|)newdomain\.com на https://$1newdomain.com. Это регулярное выражение поддерживает поддомены.

Как всегда, сначала выполните пробный запуск и проверьте несколько результатов.

Curtis Curtis
21 дек. 2017 г. 04:13:49