ここから本文です
WordPressでデータベース上のURL(ドメイン)を一気に書き換える
日がたって、改めてこのコードを読んでみたら、とってもリファクタリングの余地が大きいので、そのつもりで使ってください。いちおう動くことは動くと思いますが。
* * *
WordPress のDB上のサイトURLを一気に変換 を参考に、マルチサイト化したWordPressでも、データベース内のドメインを一気に変更するようにしました。
WordPressの引っ越しの際など、コンテンツ内のドメインも一気に書き換えられるので、便利です。
をかもと氏(上述のサイトの方)が、httpサイトとhttpsサイトのことも意識しておられたので、そのあたりの変換も大丈夫でした。
使い方
以下のコードをコピーして、WordPressをインストールしたフォルダ、wp-config.phpと同じ階層にwp_replace-siteurl.phpという名前で保存します。文字コードはASCIIにしてください。
http://{www.example.com}/wp_replace-siteurl.php?&old={old_domain}&passphrase={passphrase}
というような案配で、phpをたたいてください。passphraseはただの気休めですが、適宜変更してください。
なお、いちおう可逆の操作ではありますが、くれぐれもデータベースのバックアップを忘れないように。また、すんだら、このファイルをきちんと削除するようにしてください。
あと、ときどきwp_optionsあたりに物理パスが入っていることがありますが、まあ、これは適宜修正してください。
コード
<?php /* thx: http://dogmap.jp/2012/09/20/wordpress-replace-siteurl/ ussage: You MUST backup your database http://{www.example.com}/wp_replace-siteurl.php?&old={old_domain}&passphrase={passphrase} sample: http://www.example.com/wp_replace-siteurl.php?old=www.example.com&new=https://www1.example.com&passphrase=A9ykzk3x */ //passphrase //this is only placebo $passphrase = 'A9ykzk3x' ;//edit here if( ( @$_GET['passphrase'] != $passphrase ) ){ echo "add passphrase."; exit(); } //newsite if( @$_GET['new'] ){ $new_url = $_GET['new']; $old_url = isset( $_GET['old'] ) ? $_GET['old'] : '' ; }else{ echo "please input new site url and wp directory name!\n"; exit(); } $path = dirname( __FILE__ ) . '/' ; if ( !file_exists($path.'wp-load.php') && file_exists($path.'wp-config.php') ) { echo "Not found wp-config.php!\n"; exit(); } require_once(file_exists($path.'wp-load.php') ? $path.'wp-load.php' : $path.'wp-config.php'); global $wpdb; //multisite $is_blogs_exist = FALSE ; if( $wpdb->blogs ){ $sql = "SHOW TABLES FROM ".DB_NAME." LIKE '{$wpdb->blogs}';" ; $is_blogs_exist = $wpdb->get_results($sql); } $blog_ids = array(); if( $is_blogs_exist ){ $blogs= $wpdb->get_results(" SELECT blog_id FROM {$wpdb->blogs} WHERE site_id= '{$wpdb->siteid}' AND spam= '0' AND deleted= '0' AND archived= '0' "); foreach($blogs as $val){ $blog_ids[]= $val->blog_id; } }else{ $blog_ids = array(1); } echo "<h1>WordPress Replace Siteurl</h1>"; //wp_blogs echo "<h2>common</h2>"; $replace = new ReplaceSiteURL($new_url , $old_url , 1); if( count( $blog_ids ) > 2 ){ echo "{$replace->prefix}blogs : replace '{$replace->old_url_noschema}' to '{$replace->new_url_noschema}' ...<br />\n"; printf("Result: %d\n\n", $replace->blogs()); echo "<br />\n" ; } //wp_site echo "{$replace->prefix}site : replace '{$replace->old_url_noschema}' to '{$replace->new_url_noschema}' ...<br />\n"; printf("Result: %d\n\n", $replace->site()); echo "<br />\n" ; //wp_sitemeta echo "{$replace->prefix}sitemeta : replace '{$replace->old_url_noschema}' to '{$replace->new_url_noschema}' ...<br />\n"; printf("Result: %d\n\n", $replace->sitemeta()); echo "<br />\n" ; //each foreach( $blog_ids as $blog_id ){ $replace = new ReplaceSiteURL($new_url , $old_url , $blog_id); echo "<h2>blog_id {$blog_id}</h2>"; // wp_options echo "{$replace->prefix}options : replace '{$replace->old_url}' to '{$replace->new_url}' ...<br />\n"; printf("Result: %d\n\n", $replace->options($blog_id)); echo "<br />\n" ; // wp_posts echo "{$replace->prefix}posts : replace '{$replace->old_url}' to '{$replace->new_url}' ...<br />\n"; printf("Result: %d\n\n", $replace->posts($blog_id)); echo "<br />\n" ; // wp_posts - permalink echo "{$replace->prefix}posts : replace permalink '{$replace->old_url}' to '{$replace->new_url}' ...<br />\n"; printf("Result: %d\n\n", $replace->posts_permalink($blog_id)); echo "<br />\n" ; // wp_postmeta echo "{$replace->prefix}postmeta : replace '{$replace->old_url}' to '{$replace->new_url}' ...<br />\n"; printf("Result: %d\n\n", $replace->postmeta($blog_id)); echo "<br />\n" ; // wp_commentmeta echo "{$replace->prefix}commentmeta : replace '{$replace->old_url}' to '{$replace->new_url}' ...<br />\n"; printf("Result: %d\n\n", $replace->commentmeta($blog_id)); echo "<br />\n" ; if( $blog_id == 1 ){ // wp_usermeta echo "{$replace->prefix}usermeta : replace '{$replace->old_url}' to '{$replace->new_url}' and '{$replace->old_url_noschema}' to '{$replace->new_url_noschema}' ...<br />\n"; printf("Result: %d\n\n", $replace->usermeta($blog_id)); echo "<br />\n" ; } } echo "<p>done.</p><p><strong>please remove wp-replace-siteurl.php</strong> from your server.</p>"; exit(); // replace class class ReplaceSiteURL { public $new_url; public $old_url; public $new_url_noschema; public $old_url_noschema; public $prefix; function __construct($new_url , $old_url , $blog_id) { global $wpdb; //url $this->new_url = untrailingslashit(preg_match('/^https?:\/\//i', $new_url) ? $new_url : 'http://'.$new_url ); $old_url = (!empty($old_url) && !preg_match('/^https?:\/\//i', $old_url) ? 'http://'.$old_url : $old_url ); $this->old_url = untrailingslashit(empty($old_url) ? home_url() : $old_url); $this->old_url_noschema = str_replace( array( 'http://','https://' ) , '' , $this->old_url ) ; $this->new_url_noschema = str_replace( array( 'http://','https://' ) , '' , $this->new_url ) ; //prefix if( $blog_id != 1 ){ $this->prefix = $wpdb->base_prefix . $blog_id . '_' ; }else{ $this->prefix = $wpdb->base_prefix ; } } // wp_site public function site() { global $wpdb; $sql = $wpdb->prepare( "UPDATE `{$this->prefix}site` SET domain=REPLACE(domain, \"%s\",\"%s\") where domain like \"%s\"", $this->old_url_noschema, $this->new_url_noschema, "%{$old_url}%" ); return $wpdb->query($sql); } // wp_sitemeta public function sitemeta() { global $wpdb; $sql = $wpdb->prepare( "UPDATE `{$this->prefix}sitemeta` SET meta_value=REPLACE(meta_value, \"%s\",\"%s\") where meta_value like \"%s\"", $this->old_url_noschema, $this->new_url_noschema, "%{$old_url}%" ); return $wpdb->query($sql); } // wp_blogs public function blogs() { global $wpdb; $old_url = str_replace( array( 'http://','https://' ) , '' , $this->old_url ) ; $new_url = str_replace( array( 'http://','https://' ) , '' , $this->new_url ) ; $sql = $wpdb->prepare( "UPDATE `{$this->prefix}blogs` SET domain=REPLACE(domain, \"%s\",\"%s\") where domain like \"%s\"", $old_url, $new_url, "%{$old_url}%" ); return $wpdb->query($sql); } // wp_options public function options() { global $wpdb; $count = 0; $sql = $wpdb->prepare( "SELECT * from `{$this->prefix}options` where option_value like \"%s\"", '%'.untrailingslashit($this->old_url).'%' ); $results = $wpdb->get_results($sql); foreach ($results as $result){ $sql = $wpdb->prepare( "UPDATE `{$this->prefix}options` SET option_value=\"%s\" where option_id = %d", $this->replace($this->old_url, $this->new_url, $result->option_value) , $result->option_id ); $wpdb->query($sql); $count++; } return $count; } // wp_posts public function posts() { global $wpdb; $sql = $wpdb->prepare( "UPDATE `{$this->prefix}posts` SET post_content=REPLACE(post_content, \"%s\",\"%s\") where post_content like \"%s\"", $this->old_url, $this->new_url, "%{$this->old_url}%" ); return $wpdb->query($sql); } // posts_permalink public function posts_permalink() { global $wpdb; $sql = $wpdb->prepare( "UPDATE `{$this->prefix}posts` SET guid=REPLACE(guid, \"%s\",\"%s\") where guid like \"%s\"", $this->old_url, $this->new_url, "%{$this->old_url}%" ); return $wpdb->query($sql); } // wp_postmeta public function postmeta() { global $wpdb; $count = 0; $sql = $wpdb->prepare( "SELECT * from `{$this->prefix}postmeta` where meta_value like \"%s\"", '%'.untrailingslashit($this->old_url).'%' ); $results = $wpdb->get_results($sql); foreach ($results as $result){ $sql = $wpdb->prepare( "UPDATE `{$this->prefix}postmeta` SET meta_value=\"%s\" where meta_id = %d", $this->replace($this->old_url, $this->new_url, $result->meta_value) , $result->meta_id ); $wpdb->query($sql); $count++; } return $count; } // wp_usermeta public function usermeta() { global $wpdb; $count = 0; $sql = $wpdb->prepare( "SELECT * from `{$this->prefix}usermeta` where meta_value like \"%s\"", '%'.untrailingslashit($this->old_url).'%' ); $results = $wpdb->get_results($sql); foreach ($results as $result){ $sql = $wpdb->prepare( "UPDATE `{$this->prefix}usermeta` SET meta_value=\"%s\" where umeta_id = %d", $this->replace($this->old_url, $this->new_url, $result->meta_value) , $result->umeta_id ); $wpdb->query($sql); $count++; } $sql = $wpdb->prepare( "SELECT * from `{$this->prefix}usermeta` where meta_value like \"%s\"", '%'.untrailingslashit($this->old_url_noschema).'%' ); $results = $wpdb->get_results($sql); foreach ($results as $result){ $sql = $wpdb->prepare( "UPDATE `{$this->prefix}usermeta` SET meta_value=\"%s\" where umeta_id = %d", $this->replace($this->old_url_noschema, $this->new_url_noschema, $result->meta_value) , $result->umeta_id ); $wpdb->query($sql); $count++; } return $count; } // wp_commentmeta public function commentmeta() { global $wpdb; $count = 0; $sql = $wpdb->prepare( "SELECT * from `{$this->prefix}commentmeta` where meta_value like \"%s\"", '%'.untrailingslashit($this->old_url).'%' ); $results = $wpdb->get_results($sql); foreach ($results as $result){ $sql = $wpdb->prepare( "UPDATE `{$this->prefix}commentmeta` SET meta_value=\"%s\" where meta_id = %d", $this->replace($this->old_url, $this->new_url, $result->meta_value) , $result->meta_id ); $wpdb->query($sql); $count++; } return $count; } private function replace($origin, $replaced, $value) { if ( is_serialized($value) ) { $value = maybe_unserialize($value); $value = $this->deep_replace($origin, $replaced, $value); $value = maybe_serialize($value); } else { $value = str_replace($origin, $replaced, $value); } return $value; } private function deep_replace($origin, $replaced, $datas) { if ( is_array($datas) || is_object($datas) ) { foreach ( $datas as &$data ) { if ( is_array($data) || is_object($data) ) { $data = $this->deep_replace($origin, $replaced, $data); } else { $data = str_replace($origin, $replaced, $data); } } } return $datas; } }