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

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

Add Comment
3 Answers

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

Your Answer

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