WordPressのURL変更
問題
WordPressのURL変更を伴う引っ越し、どうするとよい?
- 開発環境 → 本番環境
- ドメイン変更
- ディレクトリ変更
答え
簡単なWordPressならMySQLのダンプファイルの文字列置換でも引っ越せるが、WordPressのデータはシリアライズされたphp変数のデータなどを含むため、単純に置換するとアンシリアライズに失敗してエラーが発生したり、正常に動作しなくなったりする。
wp-cli にはそのあたりも考慮して置換してくれる機能がある。
WordPressをインストールしたディレクトリで以下を実行。
$ wp search-replace 'https://移転元/のURL/' 'https://移転先/のURL/'
結果は以下のような出力で教えてくれる。(記事がほとんどない環境でテストしたのでReplacementsの数がとても少ないけど。)
+------------------+-----------------------+--------------+------+ | Table | Column | Replacements | Type | +------------------+-----------------------+--------------+------+ | wp_commentmeta | meta_key | 0 | SQL | | wp_commentmeta | meta_value | 0 | SQL | | wp_comments | comment_author | 0 | SQL | | wp_comments | comment_author_email | 0 | SQL | | wp_comments | comment_author_url | 0 | SQL | | wp_comments | comment_author_IP | 0 | SQL | | wp_comments | comment_content | 0 | SQL | | wp_comments | comment_approved | 0 | SQL | | wp_comments | comment_agent | 0 | SQL | | wp_comments | comment_type | 0 | SQL | | wp_links | link_url | 0 | SQL | | wp_links | link_name | 0 | SQL | | wp_links | link_image | 0 | SQL | | wp_links | link_target | 0 | SQL | | wp_links | link_description | 0 | SQL | | wp_links | link_visible | 0 | SQL | | wp_links | link_rel | 0 | SQL | | wp_links | link_notes | 0 | SQL | | wp_links | link_rss | 0 | SQL | | wp_options | option_name | 0 | SQL | | wp_options | option_value | 2 | PHP | | wp_options | autoload | 0 | SQL | | wp_postmeta | meta_key | 0 | SQL | | wp_postmeta | meta_value | 0 | PHP | | wp_posts | post_content | 2 | SQL | | wp_posts | post_title | 0 | SQL | | wp_posts | post_excerpt | 0 | SQL | | wp_posts | post_status | 0 | SQL | | wp_posts | comment_status | 0 | SQL | | wp_posts | ping_status | 0 | SQL | | wp_posts | post_password | 0 | SQL | | wp_posts | post_name | 0 | SQL | | wp_posts | to_ping | 0 | SQL | | wp_posts | pinged | 0 | SQL | | wp_posts | post_content_filtered | 0 | SQL | | wp_posts | guid | 10 | SQL | | wp_posts | post_type | 0 | SQL | | wp_posts | post_mime_type | 0 | SQL | | wp_term_taxonomy | taxonomy | 0 | SQL | | wp_term_taxonomy | description | 0 | SQL | | wp_termmeta | meta_key | 0 | SQL | | wp_termmeta | meta_value | 0 | SQL | | wp_terms | name | 0 | SQL | | wp_terms | slug | 0 | SQL | | wp_usermeta | meta_key | 0 | SQL | | wp_usermeta | meta_value | 0 | PHP | | wp_users | user_login | 0 | SQL | | wp_users | user_nicename | 0 | SQL | | wp_users | user_email | 0 | SQL | | wp_users | user_url | 0 | SQL | | wp_users | user_activation_key | 0 | SQL | | wp_users | display_name | 0 | SQL | +------------------+-----------------------+--------------+------+ Success: Made 14 replacements.
同じサーバー内でディレクトリだけ変更するような場合は、データベースはそのままで、WordPress設置場所だけ変更して、移転先で wp search-replace
で引っ越せる。
$ wp search-replace 'https://example.com/移転元ディレクトリ/' 'https://example.com/移転先ディレクトリ/'
サーバー移転を伴う場合は、移転元でダンプ取得、移転先でリストア、移転元のWordPressのファイル一式を移転先にコピー、wp-conifg.php を書き換えてデータベースにはつながる状態にしてから wp- search-replace
.
$ wp search-replace 'https://移転元/のURL/' 'https://移転先/のURL/'
どうなってしまうのか結果が怖いときは –dry-run でどのテーブルがどのくらい書き換わるのか件数だけだが確認できる。
$ wp search-replace --dry-run 'https://移転元/のURL/' 'https://移転先/のURL/'
機能としては単純に文字列の置換のようなので、以下のようなことも一応可能だが、予定外の箇所が書き換えられる可能性がある。
$ wp search-replace 'http://' 'https://'
$ wp search-replace '.com' '.net'
「移転元URL → 移転先URL」のような、予定外のものを巻き込まないようなキーワードで実行するのがよいと思われる。
参考
wp-cliのインストールはこちらを参照
https://make.wordpress.org/cli/handbook/guides/installing/
wp-cliのリファレンスはこちら
コメント