Вопрос или проблема
Я настроил локальную среду для настройки блога на WordPress моего друга. Однако почти ни одно изображение не отображается.
URL-адрес удаленного сайта: http://sitename.com
, и мой локальный виртуальный хост: http://sitename.dev
.
Я обнаружил несколько случаев, когда изображения не отображаются:
- URL в атрибуте src выглядит так:
http://i1.wp.com/sitename.com/wp-content/uploads/xxxxxx
, и при открытии этой ссылки в браузере изображение отображается правильно. Однако есть атрибутsrcset
с URLhttp://i1.wp.com/sitename.dev/wp-content/uploads/xxxxxx
, что вызывает ошибку 504, так как, очевидно, нет сайта по адресуhttp://i1.wp.com/sitename.dev
. - В другом случае просто есть URL src, подобный предыдущему
srcset
, который выглядит какhttp://i1.wp.com/sitename.dev/wp-content/uploads/xxxxxx
, и поэтому не удается загрузить ресурс.
Похоже, основная проблема в том, что i1.wp.com
добавляется к моему локальному URL, что полностью портит маршруты.
При редактировании постов из wp-admin все изображения отображаются правильно. Хотя предварительный просмотр избранного изображения не отображается правильно, потому что к URL снова добавляется i1.wp.com
, но при выборе изображения из галереи оно отображается правильно (и URL http://sitename.dev/xxxxx
).
Я не знаю, откуда берется этот добавленный сегмент, но хотел бы узнать, как его либо убрать, либо как правильно настроить изображения в моей локальной среде.
Изображения в основном хранятся в “wp_posts”. Ссылки на каждое изображение хранятся в столбце “guid” таблицы.
Попробуйте это в своей базе данных:
SELECT * FROM `wp_posts` ORDER BY `wp_posts`.`guid` ASC
Проблема ясна – ссылки не совпадают. Чтобы избавиться от проблемы, просто вручную выберите каждое изображение из вашей текущей настройки. Вот и все.
Проблема заключалась в функции Photon Jetpack. Мне просто нужно было отключить ее. Хотя я считаю, что это грязное исправление, а не полноценное решение.
Используйте плагин, чтобы заменить все ссылки с сайта dev так, чтобы они соответствовали новым.
Вы также можете использовать wp-cli.
https://developer.wordpress.org/cli/commands/search-replace/
Вам нужно обновить все ссылки в базе данных. В зависимости от размера сайта, это может быть сложно. Я регулярно перемещаю сайты. Лучший способ — без непосредственной работы с базой данных, использовать ‘Velvet Blues Update URLs’. Это по сути поиск и замена, которая меняет старые ссылки на новые с помощью простого интерфейса.
https://en-gb.wordpress.org/plugins/velvet-blues-update-urls/
Ответ или решение
Перенос сайта на локальное окружение может вызвать ряд проблем, особенно связанных с отображением изображений, как это указано в вашем случае. Рассмотрим решение этой проблемы более подробно.
Проблема
Вы столкнулись с тем, что изображения на локальном сервере не отображаются корректно из-за изменений в URL. Когда вы копировали сайт с удалённого сервера с URL http://sitename.com
на локальный сервер с URL http://sitename.dev
, изображения продолжили ссылаться на удалённые ресурсы через i1.wp.com
, что приводит к ошибкам, так как http://i1.wp.com/sitename.dev
не существует.
Решения
1. Отключение функции Photon от Jetpack
Эта функция автоматически оптимизирует изображения и сохраняет их на CDN, который вносит изменения в URL изображений. Для локальной разработки лучше временно отключить эту функцию, что позволит избежать автоматической подмены URL.
2. Замена URL в Базе Данных
Чтобы обойти проблему с некорректными URL изображений, вам необходимо обновить все соответствия URL в базе данных. Это может быть сделано несколькими способами:
-
Использование плагина Velvet Blues Update URLs. Этот плагин предоставляет простой интерфейс для замены всех старых URL на новые. Это безопасный и быстрый способ исправить ссылки.
-
Использование WP-CLI. Если вы предпочитаете командную строку, WP-CLI позволяет выполнить команду
search-replace
для замены всех упоминаний старого URL на новый в базе данных. Пример команды:wp search-replace 'http://sitename.com' 'http://sitename.dev' --skip-columns=guid
3. Ручная корректировка
Хотя это и не самый оптимальный способ, можно вручную пересохранить каждое изображение в редакторе WordPress. Это гарантирует, что новые URL будут корректными, но отнимает много времени.
Заключение
Для успешного переноса сайта на локальное окружение важно убедиться, что все ссылки статических ресурсов корректно обновлены. Использование плагинов или WP-CLI для автоматизации этого процесса может существенно сэкономить ваше время и избежать потенциальных проблем. Отключение функций, таких как Photon от Jetpack, также может быть временной мерой для устранения проблем с отображением изображений.