Перенос базы данных WordPress на новый домен

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5
Загрузка...

Это задача очень частый гость в моей работе. Дело в том, что все клиентские сайты разрабатываются на тестовых доменах, и конечно же все URL текущего домена сохраняются в таблицах mysql.

Как перенести файлы с одного хостинга на другой — отдельная тема для разговора, и как мне кажется всем давно известная, сегодня лишь правка базы данных со старыми урлами.

В каких таблицах БД прописываются ссылки домена?

  1. wp_options
  2. wp_posts
  3. wp_postmeta

Как узнать в каких таблицах есть ссылки на домен?

Для этой задачи я использую PhpMyAdmin, там есть прекрасная возможность выполнить поиск по всем таблицам одновременно. Для этого открываем приложение, нажимаем кнопку «Поиск», указываем в поле «слово» имя старого домена, отмечаем опцию «все слова», выделяем все таблицы, и жмём кнопку «Поиск».

 

Приложение выполнит поиск по всем таблицам, и выдаст результат.

 

Нажмём кнопку обзор напротив таблицы wp_options.

Обратите внимание на таблицу

Мы знаем , что в ячейке option_value, таблицы wp_options прописаны старые домены, их можно заменить в том же phpmyadmin. Это одна из самых главных замен ссылок, если их не поменять, то после переноса сайта, клиента постоянно будет перенаправлять на старый домен. Нажимаем два раза левой кнопкой мыши внутри поля, и заполняем  новый домен.

Можно выполнить sql запрос

update `wp_options` set `option_value`=REPLACE(`option_value`,'Урл старого домена','Урл Нового домена');

В таблице wp_posts так же было найдено много ссылок на старый домен, давайте посмотрим обзор этой таблицы.

Как видно старый url хранится в поле «guid», но так как этих ссылок более 70 000, то вручную их заменить будет проблематично.

Выполняем sql запрос

update `wp_posts` set `guid`=REPLACE(`guid`,'http://старый домен.ru','http://Новый домен.ru');

Если у вас стандартный префикс базы данных «wp», то для замены старых URL на новые достаточно выполнить следующие запросы:

update `wp_options` set `option_value`=REPLACE(`option_value`,'старый домен','новый домен');
update `wp_posts` set `guid`=REPLACE(`guid`,'старый домен','новый домен');

В ячейке post_content, там хранится основной текст записи или страницы, так же могут присутствовать ссылки на старый домен. Когда например используются ссылки внутри текста на другие статьи. Заменим их тоже:

update `wp_posts` set `post_content`=REPLACE(`post_content`,'старый домен','новый домен');

Не забываем про таблицу wp_postmeta и  ячейку meta_value, здесь тоже могут хранится URL сайта.

 

update `wp_postmeta` set `meta_value`=REPLACE(`meta_value`,'старый домен','новый домен');

Автозамена старых урлов с помощью php скрипта

Прежде чем запускать скрипт на новом домене, рекомендую создать бекап базы данных, затем  Создаём в корне сайта файл rewrite.php со следующим кодом. Старый и новый URL без http,https,www. Пример ivacms.ru

/*************************************************

Данный скрипт нужно запускать на новом домене

**************************************************/

include $_SERVER['DOCUMENT_ROOT'].'/wp-load.php';

function replace_url($old_url,$new_url){

  global $wpdb;
  
  $status=array();
  
  $query=$wpdb->query("update `".$wpdb->prefix."options` set `option_value=REPLACE(`option_value`,'$old_url','$new_url')");
  
  $query2=$wpdb->query("update `".$wpdb->prefix."postmeta` set `meta_value`=REPLACE(`meta_value`,'$old_url','$new_url')");
  
  $query3=$wpdb->query("update `".$wpdb->prefix."wp_posts` set `post_content`=REPLACE(`post_content`,'$old_url','$new_url')");
  
  $query4=$wpdb->query("update `".$wpdb->prefix."wp_posts` set `gud`=REPLACE(`guid`,'$old_url','$new_url')");
  
    if($query){
      
      $status[]="Замена домена в таблице ".$wpdb->prefix."options выполнено";
      
    }
    
    if($query2){
      
      $status[]="Замена домена в таблице ".$wpdb->prefix."postmeta выполнено";
      
    }
    
    if($query3){
      
      $status[]="Замена домена в таблице ".$wpdb->prefix."posts выполнено";
      
    }
    
    if($query4){
      
      $status[]="Замена домена в таблице ".$wpdb->prefix."posts выполнено";
      
    }
  
    echo implode('<br>',$status);
  

}

//Вызываем функцию. В новом и старом URL 

replace_url('Старый Url.ru','Новый Урл.ru');

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

Если ваш сайт находится на реконструкции, и доступ к нему разрешён только авторизованным пользователям специальным плагином, то лучше данный скрипт запустить на старом домене, а затем перенести файлы на новый домен. Либо временно отключить плагин, и запустить скрипт, иначе во время попытке авторизоваться на странице wp-admin, вас будет перенаправлять на старый  домен.

Со своей стороны я же сделал немного иначе, в файле index.php заменил строчку

require( dirname( __FILE__ ) . '/wp-blog-header.php' );

на

if($_SERVER['REMOTE_ADDR']=='ip')require( dirname( __FILE__ ) . '/wp-blog-header.php' );

IP — IP адрес вашего компьютера или роутера.

Ну вот в принципе и всё.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*