WordPressに限らず、ブログやCMSを運営している人はローカル環境と本番環境を持っていたりすると思います。
で、大体サーバ上にあるデータをFTPでローカルに落として来て環境を反映させたりするのですが、DB内に記述されている画像ファイルやらリンクやらが書き変わってしまうのが困りもの。
たとえばhttp://example.jpで運営しているサイトのデータベースをローカルに落として来た時、画像がリンク切れを起こしたりするんですね。
これはとても困るので、いつも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がインストールされていなければ使用できません。インストールしますか?」みたいな。
破滅派も会社になるので、そういうサービスを提供することを考えておいた方がいいんでしょうか。うーむ。