WordPressでドメインを変更した際のデータベースのドメイン変更について

WordPressを運用していて、ドメイン自体を変更する必要がある場合が『稀に』ある。


WordPressのエクスポート機能を使って移転させてもいいが、

運用中のサイトに対する導入だったりすると、うまくそれを使えない状況も存在する。


そのような時のためにPHPプログラムを書きました。


設定項目 の部分を独自に変更して使ってください。

WordPressのデータベース内の標準で用意されているテーブルに対して走査をし、

古いドメインの情報は全て新しいドメインに切り替えてます。


スクリプトはこちら。

これの拡張子を.txtから.phpに変更し、

Wordpressがインストールされているディレクトリに放り込んで、ブラウザからアクセスすればよいでしょう。

最後にvar_dump('OK');としているので、OKと画面に出るはずです。


実行する時は、phpmyadminなどでデータベースをバックアップしてから行ってください。On Your Riskのプログラムですが、

バックアップをしていれば安心です!



/*
WordPressのデータベース内のドメインを全て変更するプログラム
*/
//設定項目

$wp_config_php = "wp-config.php";
$old_domain = "古いドメインをここ"; //例)www.example.com
$new_domain = "新しいドメインをここ"; //例)new.example.com
//WordPressの設定ファイルをインクルード。主にDB設定を取得したいため
include_once($wp_config_php);
global $wpdb;
//WordPressのテーブル一覧。実際には後でprefixをくっつける
$tables = array(
'posts'             => 'ID',
'commentmeta'       => 'meta_id',
'comments'          => 'comment_ID',
'links'             => 'link_id',
'options'           => 'option_id',
'postmeta'          => 'meta_id',
'terms'             => 'term_id',
'term_relationships'=> 'object_id',
'term_taxonomy'     => 'term_taxonomy_id',
'usermeta'          => 'umeta_id',
'users'             => 'ID'
);
//テーブル一つずつを取得し、検索し、該当ドメインがあったら書き換えてUPDATE
foreach( $tables as $key => $key_id )
{
$table = $wpdb->$key;
$sql = "
SELECT
*
FROM
$table;
";

$rst = $wpdb->get_results($sql,'ARRAY_A');
if( is_array($rst) )
{
foreach( $rst as $count => $data )
{
foreach( $data as $key => $value )
{
//keyだった場合はUPDATE時に使用するので値を保管
if( strcmp($key_id,$key)==0 )
{
$object_id = $value;
}

//書き換えるべき情報を発見したらUPDATE処理開始
if( preg_match("/$old_domain/",$value) )
{
$newvalue = preg_replace("/$old_domain/",$new_domain,$value);

$update_data = array( $key  => $newvalue );
$where = array( $key_id => $object_id );
$wpdb->update( $table, $update_data, $where );
}
}
}
}
}
?>



コメントをどうぞ