Переезд сайта на новый домен или хостинг — частая задача, с которой сталкиваются разработчики и владельцы сайтов на WordPress. Часто после такого перемещения возникает проблема: изображения перестают отображаться. В этой статье подробно разберём причины такой проблемы и предложим практические способы её решения, включая примеры кода и полезные плагины.
Почему не отображаются изображения после переезда WordPress
Основные причины, по которым изображения перестают отображаться, связаны с тем, что в базе данных и файлах сайта остаются старые ссылки на изображения с прежнего домена или пути. Вот самые распространённые причины:
- Жёстко зашитые URL-адреса старого домена в базе данных.
- Кэш браузера или плагинов, которые хранят старые данные.
- Ошибки в файлах .htaccess или в настройках сервера, блокирующие доступ к папке с изображениями.
- Проблемы с правами доступа к папке uploads.
- Отсутствие или повреждение файлов в каталоге
wp-content/uploadsпри переносе.
Каждая из этих причин требует своего подхода к решению.
Как массово исправить URL изображений после смены домена
Самый эффективный способ — заменить все старые URL в базе данных на новые. Для этого можно воспользоваться плагинами или сделать это вручную через SQL-запросы.
Использование плагина Better Search Replace
Плагин Better Search Replace позволяет быстро заменить все вхождения старого домена на новый во всех таблицах базы данных.
- Установите и активируйте плагин.
- Перейдите в инструмент "Better Search Replace" в админке.
- В поле "Search for" введите старый URL, например,
http://starij-domen.ru. - В поле "Replace with" введите новый URL, например,
https://novyj-domen.ru. - Выберите все таблицы для поиска и замены.
- Сначала сделайте тестовый прогон с включённой опцией "Dry Run", чтобы увидеть, сколько будет заменено записей.
- Если всё корректно, выполните замену без "Dry Run".
После этого все ссылки на изображения будут обновлены.
Ручная замена через WP-CLI
Если у вас есть доступ к консоли сервера и установлен WP-CLI, то замену можно выполнить командой:
wp wpelement_replace_urls --old=http://starij-domen.ru --new=https://novyj-domen.ru
Эту команду нужно создавать самостоятельно, например, добавив кастомную команду для WP-CLI, или использовать стандартную:
wp search-replace 'http://starij-domen.ru' 'https://novyj-domen.ru' --all-tables
Это быстро и безопасно, если делать с бэкапом базы.
Проверка и исправление прав на папку с изображениями
Второй частой причиной проблем с отображением является неправильный доступ к файлам изображений.
- Папка
wp-content/uploadsдолжна иметь права не ниже 755. - Файлы внутри — права 644.
- Владелец файлов должен совпадать с пользователем веб-сервера (например, www-data).
Команды для исправления прав и владельца через SSH:
chmod -R 755 wp-content/uploads
find wp-content/uploads -type f -exec chmod 644 {} +
chown -R www-data:www-data wp-content/uploads
После этого сервер сможет корректно отдавать изображения.
Очистка кэша браузера и плагинов кеширования
Иногда изображения не обновляются из-за кэша. Чтобы решить это:
- Очистите кэш браузера или проверьте в режиме инкогнито.
- Если используете плагины кеширования, например, W3 Total Cache, WP Super Cache или Clearfy Pro, очистите их кэш.
- Отключите временно плагин кеширования для проверки.
Для Clearfy Pro очистка кэша осуществляется в разделе "Оптимизация" — "Очистить кеш".
Использование плагина Enable Media Replace для замены повреждённых изображений
Если файлы изображений были повреждены или не подгружаются из-за ошибок при копировании, можно заменить их без удаления из библиотеки.
- Установите и активируйте плагин Enable Media Replace.
- Перейдите в "Медиафайлы" и выберите нужное изображение.
- Используйте опцию "Заменить медиафайл" для загрузки нового файла с тем же именем.
Это удобно, если нужно быстро исправить конкретные изображения.
Автоматизация исправления ссылок с помощью кастомного скрипта
Если вы хотите полностью контролировать процесс, можно написать PHP-скрипт для замены ссылок в постах и мета-полях. Например:
function wpelement_replace_image_urls($old_url, $new_url) {
global $wpdb;
// Заменяем в контенте постов
$wpdb->query($wpdb->prepare(
"UPDATE {$wpdb->posts} SET post_content = REPLACE(post_content, %s, %s) WHERE post_content LIKE %s",
$old_url, $new_url, '%' . $wpdb->esc_like($old_url) . '%'
));
// Заменяем в мета-полях
$wpdb->query($wpdb->prepare(
"UPDATE {$wpdb->postmeta} SET meta_value = REPLACE(meta_value, %s, %s) WHERE meta_value LIKE %s",
$old_url, $new_url, '%' . $wpdb->esc_like($old_url) . '%'
));
}
// Использование:
wpelement_replace_image_urls('http://starij-domen.ru/wp-content/uploads', 'https://novyj-domen.ru/wp-content/uploads');
Этот код можно добавить в файл functions.php активной темы или в отдельный плагин, запустить один раз и удалить после успешной замены.
Как предотвратить проблемы с изображениями при будущих переездах
Чтобы минимизировать риски:
- Используйте инструменты миграции, например, плагин WPSHOP Migration с
utm_source=wpelement.ru&utm_medium=article&utm_campaign=kak-reshit-problemu-ne-rabochih-izobrazhenij-v-wordpress-posle-pereezdovдля корректного переноса файлов и базы. - Храните изображения и медиа на относительных путях, а не жёстко с доменом.
- Регулярно делайте резервные копии сайта, включая папку uploads.
- Проверяйте права доступа и конфигурации сервера до и после переноса.
Таким образом, грамотный подход к переносу и исправлению ссылок позволит избежать проблем с отображением изображений и сохранить целостность сайта.