Сменить домен после переноса сайта WordPress

Перенесли сайт с одного домена на другой.  Сайт открывается в браузере, но все ссылки на нем ведут на старый домен. Как изменить старый домен на новый после переноса сайта?

Добавить комментарий
3 Ответ (-ов)

    Сменить домен на сайте WordPress в БД после переноса можно через sql-бекап или sql-запросы. Но что делать, если нет под рукой доступа в phpMyAdmin или просто не хочется туда лазить и наделать там делов, особенно, если не знаешь что такое phpMyAdmin,  sql-запросы и  sql-бекапы 🙂
    Допустим, у нас есть ФТП доступ к сайту. Таким образом, мы можем загрузить в корень сайта небольшой скрипт, который подсоединится к базе данных и сделает необходимые нам замены во всей БД. Доступ к базе данных у нас есть – он находится в файле wp-config.php.

    Теперь создаем текстовый файл с названием replace.php и помещаем в него нижеприведенный код. Обратите внимание, что настройки в этот скрипт необходимо внести следующие (в самых первых строках скрипта):

    1. $search = Искомую строку (пишем старый_домен.сом)
    2. $replace = Заменяемую строку (новый_домен.сом)
    3. $hostname = значение define(‘DB_HOST’, ‘localhost’); из файла  wp-config.php
    4. $database =  значение define(‘DB_NAME’, ‘………’); из файла  wp-config.php
    5. $username =  значение define(‘DB_USER’, ‘………’); из файла  wp-config.php
    6. $password =  значение define(‘DB_PASSWORD’, ‘………’); из файла  wp-config.php
    
    <?php
    
    // Written by Mark Jackson @ MJDIGITAL
    
    // http://www.mjdigital.co.uk/blog
    $search = 'старый.ru'; // Ищем...
    
    $replace = 'новый.ru'; // Меняем на...
    
    $hostname = "localhost"; // Настройки базы данных
    
    $database = "host1234";
    
    $username = "host1234";
    
    $password = "password";
    //дальше ничего не трогаем
    
    $queryType = 'replace';
    
    $showErrors = true;
    
    if($showErrors) {
    
    error_reporting(E_ALL);
    
    ini_set('error_reporting', E_ALL);
    
    ini_set('display_errors',1);
    
    }
    
    $MJCONN = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR);
    
    mysql_select_db($database,$MJCONN);
    
    $table_sql = 'SHOW TABLES';
    
    $table_q = mysql_query($table_sql,$MJCONN) or die("Cannot Query DB: ".mysql_error());
    
    $tables_r = mysql_fetch_assoc($table_q);
    
    $tables = array();
    
    do{
    
    $tables[] = $tables_r['Tables_in_'.strtolower($database)];
    
    }while($tables_r = mysql_fetch_assoc($table_q));
    
    $use_sql = array();
    
    $rowHeading = ($queryType=='replace') ?
    
    'Replacing \''.$search.'\' with \''.$replace.'\' in \''.$database."'\n\nSTATUS | ROWS AFFECTED | TABLE/FIELD (+ERROR)\n"
    
    : 'Searching for \''.$search.'\' in \''.$database."'\n\nSTATUS | ROWS CONTAINING | TABLE/FIELD (+ERROR)\n";
    
    $output = $rowHeading;
    
    $summary = '';
    
    foreach($tables as $table) {
    
    $field_sql = 'SHOW FIELDS FROM '.$table;
    
    $field_q = mysql_query($field_sql,$MJCONN);
    
    $field_r = mysql_fetch_assoc($field_q);
    
    do {
    
    $field = $field_r['Field'];
    
    $type = $field_r['Type'];
    switch(true) {
    
    case stristr(strtolower($type),'char'): $typeOK = true; break;
    
    case stristr(strtolower($type),'text'): $typeOK = true; break;
    
    case stristr(strtolower($type),'blob'): $typeOK = true; break;
    
    case stristr(strtolower($field_r['Key']),'pri'): $typeOK = false; break;
    
    default: $typeOK = false; break;
    
    }
    
    if($typeOK) {
    
    $handle = $table.'_'.$field;
    
    if($queryType=='replace') {
    
    $sql[$handle]['sql'] = 'UPDATE '.$table.' SET '.$field.' = REPLACE('.$field.',\''.$search.'\',\''.$replace.'\')';
    
    } else {
    
    $sql[$handle]['sql'] = 'SELECT * FROM '.$table.' WHERE '.$field.' REGEXP(\''.$search.'\')';
    
    }
    
    $error = false;
    
    $query = @mysql_query($sql[$handle]['sql'],$MJCONN) or $error = mysql_error();
    
    $row_count = @mysql_affected_rows() or $row_count = 0;
    
    $sql[$handle]['result'] = $query;
    
    $sql[$handle]['affected'] = $row_count;
    
    $sql[$handle]['error'] = $error;
    
    $output .= ($query) ? 'OK ' : '-- ';
    
    $output .= ($row_count>0) ? '<strong>'.$row_count.'</strong> ' : '<span style="color:#CCC">'.$row_count.'</span> ';
    
    $fieldName = '`'.$table.'`.`'.$field.'`';
    
    $output .= $fieldName;
    
    $erTab = str_repeat(' ', (60-strlen($fieldName)) );
    
    $output .= ($error) ? $erTab.'(ERROR: '.$error.')' : '';
    
    $output .= "\n";
    
    }
    
    }while($field_r = mysql_fetch_assoc($field_q));
    
    }
    
    echo '<pre>';
    
    echo $output."\n";
    
    echo '<pre>';
    
    ?>
    
    

    Теперь загружаем файл  replace.php в корень нашего сайта и открываем в браузере http://наш_сайт.ру/replace.php
    В результате работы скрипта мы получим извещения о выполненной работе. И если он не выдаст ошибок, смело удаляем с хостинга файл replace.php

    Гуру Отвечено в 30.01.2015.

    Походу универсальное решение, если нет доступа к phpMyAdmin.
    А также, наверное, самое быстрое по исполнению (не надо заморачиваться с sql-бекапами

    в 30.01.2015.
    Добавить комментарий

      После смены домена обязательно нужно зайти через панель управления на хостинге в phpMyAdmin и в своей базе данных во вкладке “SQL” выполнить следующие 3 запроса:

      
      UPDATE wp_options SET option_value = REPLACE(option_value, 'stariy.com', 'noviy.com') WHERE option_name = 'home' OR option_name = 'siteurl';
      
      UPDATE wp_posts SET guid = REPLACE(guid, 'stariy.com','noviy.com');
      
      UPDATE wp_posts SET post_content = REPLACE(post_content, 'stariy.com', 'noviy.com');
      
      

      Обратите внимание на указания доменов: stariy.com и noviy.com – вместо них вы должны подставить свой старый домен и новый. После выполнения этих SQL запросов сайт будет работать корректно (все ссылки открываться по новым адресам, картинки на своих местах и т.д.).

      Знаток Отвечено в 30.01.2015.

      Маловато запросов. А как же?

      
      UPDATE wp_posts SET guid = REPLACE (guid,
      
      'старый.com', 'новый.com')
      
      WHERE post_type = 'attachment';
      UPDATE wp_postmeta SET meta_value = REPLACE (meta_value,
      
      'старый.com','новый.com');
      
      

      Также следует учитывать, что у владельца сайта могут быть плагины и темы, хранящие данные в своих полях. Так что избранными SQL запросами не решить проблему массовой замены старого домена на новый на сайте WordPress

      в 30.01.2015.

      На среднестатистическом сайте ВП, 3-ех указанных SQL запросов вполне достаточно!

      в 30.01.2015.
      Добавить комментарий

        Я всегда делаю следующим образом:

        1. Выгружаю БД через phpMyAdmin в sql-бекап
        2. Открываю в текстовом редакторе sql-бекап базы данных и через “Искать и Заменить” заменяю все вхождения старого домена на новый.
        3. Отредактированный sql-бекап загружаю снова через phpMyAdmin (удалив предварительно с базы все таблицы).

        Таким образом решается проблема массовой замены старого домена на новый во всей базе данных сайта WordPress.

        Специалист Отвечено в 30.01.2015.
        Добавить комментарий

        Ваш ответ

        Размещая свой ответ, вы соглашаетесь с политикой конфиденциальности и условиями предоставления услуг.