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 );
}
}
}
}
}
?>