Как обновить ссылки на медиафайлы в WordPress после миграции?
Я перенес свой сайт WordPress на новый хостинг и новый URL. Я выполнил все стандартные операции поиска и замены в mysql, и сайт работает отлично.
Однако, в ссылках на мои изображения отсутствует .co.uk
, из-за чего они не работают.
Странно то, что все URL-адреса изображений правильные в исходном коде блогов. Но в моей медиа-библиотеке во всех ссылках отсутствует .co.uk.
Как мне добавить .co.uk обратно в URL-адреса моей медиа-библиотеки?
Как упоминалось в комментариях под вашим вопросом, некоторые данные в базе WordPress сериализованы, поэтому их нельзя изменить простым поиском и заменой.
Вам следует ознакомиться с разделом Перемещение WordPress в кодексе. Особенно с частью Изменение доменного имени и URL-адресов. Обычно я использую плагин или инструмент командной строки, в зависимости от того, что мне доступно.
Плагин:
Better Search Replace — полезный плагин, рекомендованный в указанной выше статье. Есть и другие плагины с аналогичным функционалом, но это мой предпочтительный выбор. Некоторые особенности, которые мне нравятся:
- Поддержка сериализованных данных.
- Возможность выбора одной или нескольких таблиц.
- Функция "пробного запуска" для тестирования и проверки изменений перед их реальным применением.
- Минимальные требования к серверу (всё, что нужно — это установленный WordPress).
Инструмент командной строки:
Другой вариант, который работает с сериализованными данными — это инструмент search-replace в WP-CLI. Он используется через командную строку (например, через SSH) и требует установки wp-cli на сервере. Вы можете ознакомиться с документацией, чтобы увидеть все доступные опции и примеры, но базовое использование выглядит так:
# Поиск старого доменного имени и его замена на новое
$ wp search-replace 'http://old.example.dev' 'http://new.example.com'

Если вы считаете, что этот ответ заслуживает отрицательного голоса, пожалуйста, оставьте комментарий с объяснением причины, чтобы я мог его обновить или удалить. Я считаю этот ответ корректным, но открыт для критики. Спасибо! :-)

Почему этот ответ получил отрицательный голос — для меня загадка. Я проголосовал за него. Better Search and Replace отлично подходит для сериализованных данных, таких как виджеты, пользовательские метабоксы и подобные ситуации.

Спасибо, Кристина. Думаю, отрицательный голос был из-за того, что в ответе рекомендовался только плагин. Это понятно — я обычно не люблю ответы, которые предлагают только плагины, но в данном случае это казалось оправданным. В любом случае, я обновил ответ, добавив ссылку на статью в Codex, где это рекомендуется. Надеюсь, это кому-то поможет!

Better Search Replace — отличный плагин, и я использую его постоянно. Возможно, кто-то поставил низкую оценку, потому что для замены URL медиафайлов в BSR нужно отметить галочку "Replace GUIDs", которая по умолчанию не активна. У меня тоже не работало, пока я не посмотрел таблицу и не увидел, что URL хранится в поле GUID.

Это довольно распространенная проблема, поэтому я считаю, что она заслуживает подробного ответа, который охватывает ситуацию, с которой большинство, вероятно, сталкивается при поиске в Google.
Для конкретной проблемы пользователя Montrealist
Что касается конкретного вопроса, похоже, что @montrealist некорректно выполнил процесс поиска и замены в базе данных. Я вижу URL медиафайла:
http://www.cosworth-europe/sam/wp-content/...
Предполагаю, что он должен быть:
http://www.cosworth-europe.co.uk/sam/wp-content/...
В какой-то момент вы потеряли домен верхнего уровня (TLD), так что это первое, на что стоит обратить внимание. Вы можете повторно выполнить поиск и замену примерно так:
- Найти:
//www.cosworth-europe/
- Заменить на:
//www.cosworth-europe.co.uk/
Это должно исправить конкретную проблему, которую я вижу здесь, при условии, что мои предположения верны.
Для тех, кто ищет решение аналогичных проблем
WordPress хранит множество ссылок на URL в своей базе данных. Нет единого конфигурационного файла для хоста сайта, поэтому вам нужно выполнить поиск и замену в базе данных, чтобы исправить это. В зависимости от того, где используются эти изображения, вам также может потребоваться убедиться, что сериализованные строки заменены корректно.
В большинстве случаев я рекомендую следующее решение:
- Установите плагин Better Search Replace
- Найдите и замените ваш домен без указания протокола, то есть замените
//www.olddomain.com
на//www.newdomain.com
- Протестируйте и убедитесь, что нет проблем, затем удалите плагин
Обычно я не рекомендую плагины как решение, я предпочитаю минималистичный код, но для этого конкретного случая я бы лично использовал плагин WP Migrate DB Pro для этой и других задач, связанных с переносом базы данных. Плагин Better Search and Replace разработан той же компанией, Delicious Brains, и предоставляет тот же процесс поиска и замены. Это отличный вариант для тщательного решения этой проблемы.
Если у вас возникнут проблемы, и вы не сможете войти в WordPress, вы можете подключиться по (S)FTP к директории вашей установки и установить или обновить следующие константы в файле wp-config.php
:
define( 'WP_HOME', 'https://www.example.com' );
define( 'WP_SITEURL', 'https://www.example.com' );
Однако это следует делать только временно. После исправления проблемы в базе данных лучше удалить эти строки из файла wp-config.php
.

Пришел посмотреть это — попробовал плагины Velvet Blues Update URL и другие, но ничего не помогло. Тогда я подумал, почему бы просто не обновить это через MySQL?
Сначала обновите таблицу wp_posts. Ваш SQL-запрос будет выглядеть так:
UPDATE `wp_posts` SET post_content = REPLACE(post_content, 'oldurl', 'newurl') WHERE post_content like "%oldurl%"

Для миграции сайта рекомендуется использовать плагин WP All in One Migration. https://wordpress.org/plugins/all-in-one-wp-migration/
