WordPressで投稿された記事などをSQL文で一括置換するためのメモです。
この方法では、SQL文を使用するときにphpMyAdminの管理画面を使っています。
投稿記事内のURLを一括置換する
WordPressでブログを運営しているときに “投稿記事内に記述していたサイトのURLのリンクが切れていた” もしくは “ドメインが変更されていた” などという時があるかと思います。
以下に、そのURLをphpMyAdmin上からSQL文で一括置換する方法をご紹介します。
1. phpMyAdminからデータベースを表示してwp_postsを選択
まず、phpMyAdminの管理画面を開いて、サイドメニューからブログで使われているデータベースを選択して下さい。投稿記事内のURLが記述されているのは wp_posts というテーブル名なので、wp_posts を選択します。
2. テーブルのバックアップを取っておく
もしもの時のためにバックアップを取ってください。
上部にあるタブメニューからエクスポートを選択して、以下の図のような設定で [実行する] をクリックします。
エクスポートを実行すると “wp_posts.sql” というファイルがダウンロードされるので、それがデータを復元するときに必要なファイルとなります。
もし、ファイルを復元するときはタブメニューからインポートを選択して、インポートするファイルから先ほどダウンロードしたファイルを選択して [実行する] をクリックしてください。
3. SQL文を実行して投稿記事内のURLを一括置換する
上部にあるタブメニューからSQLを選択します。
“データベース blog 上でクエリを実行する” と書かれたテキストフィールドにSQL文を入力して [実行する] をクリック。
テキストフィールド入力するSQL文は、UPDATE文を使ってデータの更新を行います。
UPDATE文は以下のように使われます。
UPDATE wp_posts SET `post_content` = replace(`post_content`, 'http://syake-web.com/', 'http://syake-labo.com/')
また、MarkDownで記事を書かれている方はこちらの処理も必要になりますので、続けて実行して下さい。
UPDATE wp_posts SET `post_content_filtered` = replace(`post_content_filtered`, 'http://syake-web.com/', 'http://syake-labo.com/')
プラグインを使う方法
もっと簡単な方法でSerch Regexというプラグインを使えば、WordPressの管理画面で “Source” から “Post content” を選ぶことによって投稿記事の中身を一括置換できるようになります。
ただし、MarkDownで記事を書いている場合は元の記事は反映されないので、かなりのハマりポイントです。ご注意下さい。
データベースをローカル環境へ引き継ぎする
WordPressで本番サーバーからローカル環境へデータベースを反映する場合、phpMyAdmin から WordPressで使っているテーブルをエクスポート&インポートした場合に、ドメインの設定も書き換える必要があります。たとえば、“管理画面のリダイレクトURLの設定” や “アイキャッチ画像のドメイン” など。
まずは、テーブルのエクスポート&インポートが完了させます。
こちらの方法は割愛しますが、バックアップを取るのを忘れないようにして下さい。
管理画面のリダイレクトURLの変更
WordPressの設定関連は、ほとんどwp_optionsに記述されているのでwp_optionsの中身を一括置換します。
UPDATE wp_options SET `option_value` = replace(`option_value`, 'http://syake-labo.com/blog', 'http://localhost/blog')
これで、WordPressの管理画面を開いたときに、別のドメインへリダイレクトしなくなったと思います。
また、wp_optionsにサーバーの絶対パスも記述されているので、それも差し替えておきます。
例えば、移行する元のサーバーパスが “/home/hoge/www/blog/” で移行先のサーバーパス(つまり、ローカルPCに保存されている場所)が “/Users/hoge/Sites/blog/” の場合は以下のようになります。
UPDATE wp_options SET `option_value` = replace(`option_value`, '/home/hoge/www/blog/', '/Users/hoge/Sites/blog/')
アイキャッチ画像のドメインの変更
記事に紐づいてるアイキャッチ画像は絶対パスに指定されているので、それを移行先のドメインへと一括置換します。アイキャッチ画像のURLはテーブル名wp_postsのカラム名guidに記述されています。例えば「“http://syake-labo.com/blog” → “http://localhost/blog”」へ一括置換する場合は以下のようになります。
UPDATE wp_posts SET `guid` = replace(`guid`, 'http://syake-labo.com/blog', 'http://localhost/blog')