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

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

Add Comment
3 Answer(s)

Сменить домен на сайте 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

ГУРУ Answered on 30.01.2015.

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

on 30.01.2015.
Add Comment

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

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');
UPDATE wp_posts SET guid = REPLACE (guid, 'stariy.com', 'noviy.com') WHERE post_type = 'attachment';
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'stariy.com','noviy.com');

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

Понимающий Answered on 30.01.2015.
Add Comment

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

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

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

Сторонник Answered on 30.01.2015.
Add Comment

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.