WordPressの引越でSQLデータの置換はNG!WP-CLIのWP Search-replaceを使おう

久しぶりの投稿です。超絶乱れた生活習慣を見直しております。

前置き

さて、みなさんWordPressの引越しってどうやってますか?ローカル環境から本番サーバへのアップ、テストサーバから本番サーバへのアップなど、Web制作でWordPressを使っている人であれば誰しも経験したことがあるのではないでしょうか?

その際、みなさんはどのような方法で引越ししていますか?私が知っている方法としては下記が考えられるのですが、いかがでしょうか。

  • WordPressのプラグインを使った引越し(All in One WP Migration)
  • SQLデータをエクスポート・インポートの引越し
  • エックスサーバーの機能を使った引越し

個人的に2のSQLデータをエクスポート・インポートの引っ越しがDBを直接触ってる感があってかっこいいなんて思うのですが、ある程度知識がないと事故りますよね。はい、私も先日までその一人でした。

幸いにも大事故にはならなかったのですが、WordPressの有料テーマを使用した案件で、その事故はおきました。

有料テーマのプラグインってカスタマイザーなどを使っていて、データベースのデータがシリアライズ化されてるんですよね。シリアライズ化というのは下記のような感じの記述。

a:10:{i:0;s:31:"query-monitor/query-monitor.php";i:1;s:30:"advanced-custom-fields/acf.php";i:2;s:43:"all-in-one-seo-pack/all_in_one_seo_pack.php";i:3;s:33:"duplicate-post/duplicate-post.php";i:4;s:45:"enable-media-replace/enable-media-replace.php";i:5;s:21:"filebird/filebird.php";i:6;s:43:"map-block-gutenberg/map-block-gutenberg.php";i:7;s:25:"mw-wp-form/mw-wp-form.php";i:8;s:43:"public-post-preview/public-post-preview.php";i:9;s:37:"tinymce-advanced/tinymce-advanced.php";}

このコードの下記の部分。

i:0;s:31:"query-monitor/query-monitor.php";

sがStringで31バイトありますよ〜って意味。
このコードはプラグインだけど、仮にサイトのURLを置換した場合「localhost」→「seeder.site」9バイトから11バイトに変わるわけ。””内の文字列だけではなく、sの値も変えてあげる必要があります。これを一つ一つ変えていくのは現実的に不可能ですよね。

本題(WP Search-replaceとは)

そんなシリアライズされたWordPressの文字列置換を一気に解決してくれるのがWP-CLIのWP Search-replace。(この事故のおかげでWordPressに便利コマンドが用意されていることを知りました。)

このコマンドを使えばシリアライズされた文字列も一気に置換できます。SSHでWordPressがあるサーバーにアクセスしてWordPressのrootディレクトリで下のコマンドを叩けば置換できます。(左が置換前で右が置換後)

wp search-replace 'http://wordpress.local' 'http://example.local'

いやぁ、めちゃくちゃ便利。WP CLIには他にも便利なコマンドがありますのでぜひ覗いてみては。

この記事はGatespace7s Blogを参考にしました。助かりました、ありがとうございました。

参考記事

不安な人はおとなしくこれを使うのが良さそう

この記事を書いた人

keishiro

こんにちは、板川恵司朗です。