fbpx

メニュー

WordPressのテスト環境と本番環境を同期する時に使えるSQL文

高橋文樹 高橋文樹

この投稿は 13年半 前に公開されました。いまではもう無効になった内容を含んでいるかもしれないことをご了承ください。

WordPressに限らず、ブログやCMSを運営している人はローカル環境と本番環境を持っていたりすると思います。

で、大体サーバ上にあるデータをFTPでローカルに落として来て環境を反映させたりするのですが、DB内に記述されている画像ファイルやらリンクやらが書き変わってしまうのが困りもの。

たとえばhttp://example.jpで運営しているサイトのデータベースをローカルに落として来た時、画像がリンク切れを起こしたりするんですね。

これはとても困るので、いつもSQL文をデータベースに発行して書き換えたりするんですが、普段あんまりSQLを書かないので、すぐ忘れてしまいます。

phpMyAdminでSQLを発行するには
phpMyAdminでSQLを発行するには「SQL」ボタンを押す

PHPerにはSQLを覚えていない人って結構多いんじゃないですかね。普段の開発ではそんなに書かなくてもなんとかなっちゃいますからね。

というわけで、とりあえず発行しておくといいSQLはこちらです。

http://example.jp でブログを運営している人が、 http://localhost の開発環境にデータを移す場面を想像して書いてみました。

phpMyAdminとかでデータベースを選択したら、「SQL」を押して発行するといいと思います。

UPDATE `wp_options` SET option_value = REPLACE(option_value, "http://example.jp","http://localhost");
UPDATE `wp_posts` SET post_content = REPLACE(post_content, "http://example.jp","http://localhost"), guid = REPLACE(guid, "http://example.jp","http://localhost");
UPDATE `wp_links` SET link_image = REPLACE(link_image, "http://example.jp","http://localhost"), link_url = REPLACE(link_url, "http://example.jp","http://localhost");

と、紹介しておきながらふと思ったんですが、これって簡単に書けそうですね。

書いてみました。

<?php
	require_once dirname(__FILE__).DIRECTORY_SEPARATOR."wp-load.php";
	$old_url = get_bloginfo("url");
	$new_url = "http://localhost"; //←適宜書き換えてください。末尾のスラッシュの有無に注意!
	
	$sql = array(
	                    "UPDATE `{$table_prefix}options` SET option_value = REPLACE(option_value, '{$old_url}','{$new_url}')",
	                    "UPDATE `{$table_prefix}posts` SET post_content = REPLACE(post_content, '{$old_url}','{$new_url}'), guid = REPLACE(guid, '{$old_url}','{$new_url}')",
	                    "UPDATE `{$table_prefix}links` SET link_image = REPLACE(link_image, '{$old_url}','{$new_url}'), link_url = REPLACE(link_url, '{$old_url}','{$new_url}')"
	                    );
	foreach($sql as $s){
		$wpdb->query($s);
	}
?>

上記のファイルをWordPressのルートフォルダに置いて、ブラウザからアクセスするとたぶん置換できると思います。

ただし、完全に思いつきで書いたので、ダメでも苦情はナシでお願いします。基本的にローカルの開発環境を想定していますので、サーバに上げたりして飛んでもないことが起きても知りませんよ。

ところで、最近WordPressでサイトを作っていて思うのは、管理画面をハードにカスタマイズする案件が面倒だなと思います。

ちょっと工夫すれば管理画面ジェネレータを作れそうな気がしてるんですが、需要はあるのかな。

あと、yumとかMacportみたいにプラグイン同士の依存を解決する仕組みも欲しいですね。「このプラグインはプラグインAがインストールされていなければ使用できません。インストールしますか?」みたいな。

破滅派も会社になるので、そういうサービスを提供することを考えておいた方がいいんでしょうか。うーむ。

すべての投稿を見る

高橋文樹ニュースレター

高橋文樹が最近の活動報告、サイトでパブリックにできない情報などをお伝えするメーリングリストです。 滅多に送りませんので、ぜひご登録お願いいたします。 お得なダウンロードコンテンツなども計画中です。