После переноса сайта на другой домен пропали все изображения

4 сент. 2014 г., 22:22:35
Просмотры: 65K
Голосов: 10

Я перенес сайт с www.domain1.com на www.domain2.com

Однако пути к изображениям всё ещё указывают на www.domain1.com/wp-content/uploads.... Поэтому когда www.domain1.com перестал работать, все мои изображения перестали отображаться.

Я обновил таблицу wp_posts, где все вложения теперь указывают на www.domain2.com/wp-content/uploads..., но изображения физически существуют на www.domain2.com, и я всё равно не вижу ни одного изображения. Может быть проблема в кэшировании?

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

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

Ethan Rævan Ethan Rævan
29 авг. 2016 г. 16:54:26

Для этого вам следует использовать плагин wp-migrate-db. После экспорта и импорта базы данных обязательно сохраните настройки постоянных ссылок

Malay Solanki Malay Solanki
5 мар. 2018 г. 11:15:14
Все ответы на вопрос 10
1
11

Похоже, вам нужно изменить URL-адреса для старых изображений. Самый простой и быстрый способ сделать это — выполнить поиск и замену в базе данных MySQL.

Вы можете использовать PHPMyAdmin (обычно предоставляется вашим хостинг-провайдером) или другое программное обеспечение для работы с MySQL, такое как Sequel Pro, чтобы вносить изменения в базу данных MySQL, не затрагивая админ-панель WordPress. Это означает, что вы можете делать масштабные изменения, выполняя SQL-запросы, вместо того чтобы вносить их по одному, что утомительно и занимает много времени.

Не забудьте сначала сделать резервную копию вашей базы данных. Чтобы сделать это в PHPMyAdmin, выберите вашу базу данных в боковой панели слева, затем нажмите "Экспорт". Метод "Простой" подойдет, но если вам нужно больше контроля, то метод "Пользовательский" предоставит вам множество опций.

После создания резервной копии перейдите на вкладку SQL и вставьте следующий код в текстовое поле:

UPDATE wp_options SET option_value = replace(option_value, 'oldurl', 'newurl') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'oldurl','newurl');

UPDATE wp_posts SET post_content = replace(post_content, 'oldurl', 'newurl');

UPDATE wp_postmeta SET meta_value = replace(meta_value,'oldurl','newurl');

Замените "oldurl" на ваш старый URL и "newurl" на новый URL, сохраняя http://, но удаляя завершающие слеши. Проверьте все внимательно, и когда будете уверены, нажмите кнопку "Вперед".

Перейдите на ваш сайт и проверьте, работают ли изображения. Если нет, скорее всего, это опечатка, которую можно исправить, восстановив базу данных из резервной копии, сделанной в начале процесса, и попробовав снова.

Более подробное руководство по переносу домена WordPress можно найти на этом сайте, где также есть ссылка на скрипт для автоматического создания SQL-запроса.

4 сент. 2014 г. 23:48:20
Комментарии

Ответ должен быть чем-то большим, чем просто ссылка. Этот пример находится на грани, но обязательно ознакомьтесь с "Как написать хороший ответ?": "Ссылки на внешние ресурсы приветствуются, но пожалуйста, добавляйте контекст вокруг ссылки, чтобы другие пользователи понимали, что это и зачем она нужна. Всегда цитируйте наиболее релевантную часть важной ссылки на случай, если целевой сайт окажется недоступен или перестанет существовать."

mrwweb mrwweb
5 сент. 2014 г. 02:00:00
2

Если ваш сайт достаточно небольшой, вы можете...

  1. Войти в phpMyAdmin.
  2. Экспортировать вашу базу данных в SQL-файл.
  3. Сделать копию SQL-файла базы данных, чтобы у вас была резервная копия оригинальной базы на случай ошибок.
  4. Открыть SQL-файл базы данных в текстовом редакторе.
  5. Найти и заменить domain1.com на domain2.com.
  6. Сохранить SQL-файл базы данных.
  7. Войти в phpMyAdmin снова.
  8. Импортировать SQL-файл базы данных.

ОБНОВЛЕНИЕ 18.03.2016

ПОСЛЕ выполнения вышеуказанных шагов, выполните следующую процедуру:

Шаг 1 – Создайте функцию для использования.

function mbe_migrate_widgets() {

}

Шаг 2 – Укажите, что искать и на что заменять.

function mbe_migrate_widgets() {

    $old_domain = 'http://dev.';
    $new_domain = 'http://beta.';

}

Шаг 3 – Получите все виджеты WordPress.

function mbe_migrate_widgets() {

    $old_domain = 'http://dev.';
    $new_domain = 'http://beta.';

    global $wpdb;

    // Получить все виджеты
    $widgets = $wpdb->get_results(
        "
        SELECT `option_id`, `option_name`
        FROM $wpdb->options
        WHERE `option_name`
        LIKE '%widget_%'
        "
    );

}

Шаг 4 – Пройдитесь по всем виджетам WordPress и получите информацию для каждого.

function mbe_migrate_widgets() {

    $old_domain = 'http://dev.';
    $new_domain = 'http://beta.';

    global $wpdb;

    // Получить все виджеты
    $widgets = $wpdb->get_results(
        "
        SELECT `option_id`, `option_name`
        FROM $wpdb->options
        WHERE `option_name`
        LIKE '%widget_%'
        "
    );

    if ( ! $widgets ) {
        return false;
    }

    $actions = array();

    foreach ( $widgets as $widget ) {

        // Получить данные виджета.
        $widget_data = get_option( $widget->option_name );

    }

    return $actions;

}

Шаг 5 – Выполните поиск и замену в данных виджета и обновите записи в базе данных.

function mbe_migrate_widgets() {

    $old_domain = 'http://dev.';
    $new_domain = 'http://beta.';

    global $wpdb;

    // Получить все виджеты
    $widgets = $wpdb->get_results(
        "
        SELECT `option_id`, `option_name`
        FROM $wpdb->options
        WHERE `option_name`
        LIKE '%widget_%'
        "
    );

    if ( ! $widgets ) {
        return false;
    }

    $actions = array();

    foreach ( $widgets as $widget ) {

        // Получить данные виджета.
        $widget_data = get_option( $widget->option_name );

        // Обновить данные виджета, заменив старый домен на новый.
        $update = update_option(
            $widget->option_name,
            recursive_array_replace( $old_domain, $new_domain, $widget_data )
        );

        if ( $update ) {
            $actions['success'][] = $widget->option_id;
        } else {
            $actions['failed'][] = $widget->option_id;
        }

    }

    return $actions;

}

Шаг 6 – Добавьте пользовательскую рекурсивную функцию замены в массиве.

// Рекурсивная замена строки - recursive_array_replace(mixed, mixed, array);
function recursive_array_replace( $find, $replace, $array ) {

    if ( ! is_array( $array ) ) {
        return str_replace( $find, $replace, $array );
    }

    $newArray = array();

    foreach ( $array as $key => $value ) {
        $newArray[ $key ] = recursive_array_replace( $find, $replace, $value );
    }

    return $newArray;

}

Вот и всё. Запустите эту функцию один раз, и все ваши виджеты должны снова начать работать.

Примечание: Вам решать, где разместить этот код или как его выполнить. Также замените переменные $old_domain и $new_domain соответствующими значениями.

Дополнительное примечание: Учтите, что этот пример влияет только на виджеты. Если у вас есть другие части сайта, содержащие URL-адреса в сериализованных данных, измените запрос к базе данных соответствующим образом. (Речь идёт о этой части кода: SELECT option_id, option_name FROM $wpdb->options WHERE option_name LIKE '%widget_%').

Я бы опубликовал ссылку на свою статью по этой теме, но не хочу выглядеть "спаммером". По сути, это копия/вставка из статьи, которую я написал на своём сайте от 18.03.2016. Содержимое этого ответа может устареть, а статья на моём сайте может быть более актуальной в будущем. Если вам интересно, проверьте мой профиль для ссылки на мой сайт.

Полезное объяснение сериализованных данных: Анатомия сериализованного значения.

5 сент. 2014 г. 01:01:44
Комментарии

Не делайте так! Некоторые настройки могут повредиться из-за этого! Если вы сохраняете массив в WordPress, он сохраняется в таком синтаксисе: a:1:{i:0;s:6: "setting"}. Цифры обозначают длину строки (1 массив, ключ 0, строка длиной 6), поэтому если вы измените с mysite.com на mynewsite.com, длина не будет совпадать, что приведет к повреждению массива.

Jeroen Jeroen
18 мар. 2016 г. 17:43:30

@Jeroen Я обновил свой ответ касательно сериализованных данных. Надеюсь, это поможет.

Michael Ecklund Michael Ecklund
19 мар. 2016 г. 05:05:51
0

Рискуя ответить на вопрос просто ссылкой, я думаю, что следующие шаги на этой странице (http://codex.wordpress.org/Moving_WordPress) — это то, что вам нужно:

Изменение имени домена и URL-адресов

Вам нужно безопасно заменить все упоминания старого домена на новый в базе данных. Это можно сделать одним из следующих способов:

  1. Выполнить поиск и замену только в таблице wp_posts.

  2. Использовать скрипт поиска и замены для баз данных WordPress, чтобы безопасно изменить все вхождения. (Если вы разработчик, используйте этот вариант. Это одношаговый процесс в отличие от 15-шаговой процедуры ниже).

  3. По желанию, можно также воспользоваться онлайн-инструментом (если не хочется загружать скрипты на сервер) — Online WordPress Serialized PHP Search and Replace, который позволяет заменить старый домен или URL на новый, одновременно исправляя сериализованные данные.

На этой странице также много другой полезной информации о миграции WordPress.

6 сент. 2014 г. 00:10:02
0

Похоже, у вас уже есть ответ, но я настоятельно рекомендую использовать DBSR (db search replace) для замены ВСЕХ вхождений domain1 на domain2. Для этого существуют специальные инструменты. Этот довольно удобный: https://github.com/interconnectit/Search-Replace-DB

Весь процесс подробно описан. Интерфейс удобный.

Таким образом вы будете уверены, что все записи в базе данных корректны.

29 июн. 2016 г. 00:29:58
0

Хотя вы утверждаете, что обновили данные в таблице wp_posts на www.domain2.com, остаются записи home и siteurl в таблице wp_options, которые также необходимо изменить, среди прочего.

Чтобы убедиться, что все данные обновлены для вашего нового домена, выполните следующие шаги:

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

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

29 авг. 2016 г. 17:00:39
0

очень простой способ

Установите плагин Velvet в админку вашего WordPress.

Теперь перейдите в настройки Velvet, введите старый домен и новый домен. Нажмите кнопку "Обновить". Готово!

5 мар. 2018 г. 11:41:00
0

Используйте WP Migrate DB для экспорта данных в zip-архиве с заменой URL.

С этим плагином вы не потеряете виджеты или сериализованные данные.

Экспорт базы данных WordPress с заменой URL

5 мар. 2018 г. 11:50:34
0

Вы можете использовать плагин для WordPress: Go Live Update Urls

Это действительно просто и быстро.

15 нояб. 2021 г. 12:16:22
1
-1

После входа в cPanel найдите категорию "Базы данных" и нажмите на значок инструмента phpMyAdmin. Теперь вы находитесь на главной странице phpMyAdmin. Найдите только что добавленную базу данных и кликните по её названию в левой боковой панели. В нашем примере база данных называется testdb. Это откроет базу данных, и экран обновится, показывая список таблиц. Снова используя боковую панель, найдите и кликните по таблице wp-posts. В верхней части экрана вы увидите несколько вкладок. Нажмите на вкладку SQL. Теперь вы находитесь на экране редактора MySQL. В области для кода скопируйте следующий фрагмент MySQL:

UPDATE wp_posts SET post_content=(REPLACE (post_content, 'dommain1.com','domain2.com'));

Сработает?

29 авг. 2016 г. 16:34:37
Комментарии

Чем это отличается от другого ответа? В базе данных есть больше ссылок на изображения, чем просто содержимое поста.

Howdy_McGee Howdy_McGee
29 авг. 2016 г. 16:58:40
0
-2

Привет, если вы работаете с базой данных, используйте следующие шаги.

  1. Войдите в phpMyAdmin.
  2. Экспортируйте вашу базу данных в SQL-файл.
  3. Сделайте копию SQL-файла базы данных, чтобы у вас была резервная копия оригинальной базы на случай ошибок.
  4. Откройте SQL-файл базы данных в текстовом редакторе.
  5. Найдите и замените domain1.com на domain2.com.
  6. Сохраните SQL-файл базы данных.
  7. Снова войдите в phpMyAdmin.
  8. Импортируйте ваш SQL-файл базы данных.
28 июл. 2015 г. 13:57:08