rui live note

WordPress、PHP、子育て、ブログ、将棋、コワーキング、子育て、群馬等に関する日々感じたことを書いているブログです

*

WordPress移行時にwp search-replaceコマンドでマルチサイトのドメイン文字列も置換する

      2016/10/04   WordPress, 開発 ,

  • このエントリーをはてなブックマークに追加
  • Pocket

WP-CLI

WP-CLI の「wp search-replace」コマンドについて、自己解決した件をメモ代わりにまとめておきます。

wp search-replace でマルチサイトのテーブルも置換する

wp search-replace で URL 文字列を置換するときの基本コマンドはこちらです。

ところが、WordPress のネットワーク機能で作ったあるマルチサイトについて、サイト移行時に URL 文字列の置換をしようとしたのですが、どうにも置き換わらないデータが残ってしまいます。。

で、そのデータを調べると、マルチサイトのテーブル(マルチサイトのテーブル名は「wp_2_posts」のように間に wp_blogs.blog_id が含まれます)ばかりだったので、wp search-replace は未対応なのかな・・・と一時は思い込んでしまいました。

でも安心してください、さすが WP-CLI!ちゃんとネットワーク機能に対応するためのオプション「–network」が用意されていました。

オプションを付けたコマンドはこのようになります。

コマンド実行結果を見ると、ちゃんとマルチサイトのテーブルも対象にして置換が行われていることが分かります。

$ wp search-replace --network 'http://example.com' 'http://example.jp'
+---------------------+-----------------------+--------------+------+
| Table               | Column                | Replacements | Type |
+---------------------+-----------------------+--------------+------+
| wp_2_commentmeta    | meta_key              | 0            | SQL  |
| wp_2_commentmeta    | meta_value            | 0            | SQL  |
| wp_2_comments       | comment_author        | 0            | SQL  |
| wp_2_comments       | comment_author_email  | 0            | SQL  |
| wp_2_comments       | comment_author_url    | 0            | SQL  |
| wp_2_comments       | comment_author_IP     | 0            | SQL  |
| wp_2_comments       | comment_content       | 0            | SQL  |
| wp_2_comments       | comment_approved      | 0            | SQL  |
| wp_2_comments       | comment_agent         | 0            | SQL  |
| wp_2_comments       | comment_type          | 0            | SQL  |
| wp_2_links          | link_url              | 0            | SQL  |
| wp_2_links          | link_name             | 0            | SQL  |
| wp_2_links          | link_image            | 0            | SQL  |
| wp_2_links          | link_target           | 0            | SQL  |
| wp_2_links          | link_description      | 0            | SQL  |
| wp_2_links          | link_visible          | 0            | SQL  |
| wp_2_links          | link_rel              | 0            | SQL  |
| wp_2_links          | link_notes            | 0            | SQL  |
| wp_2_links          | link_rss              | 0            | SQL  |
| wp_2_options        | option_name           | 0            | SQL  |
| wp_2_options        | option_value          | 2            | PHP  |
| wp_2_options        | autoload              | 0            | SQL  |
| wp_2_postmeta       | meta_key              | 0            | SQL  |
| wp_2_postmeta       | meta_value            | 0            | PHP  |
| wp_2_posts          | post_content          | 0            | SQL  |
| wp_2_posts          | post_title            | 0            | SQL  |
| wp_2_posts          | post_excerpt          | 0            | SQL  |
| wp_2_posts          | post_status           | 0            | SQL  |
| wp_2_posts          | comment_status        | 0            | SQL  |
| wp_2_posts          | ping_status           | 0            | SQL  |
| wp_2_posts          | post_password         | 0            | SQL  |
| wp_2_posts          | post_name             | 0            | SQL  |
| wp_2_posts          | to_ping               | 0            | SQL  |
| wp_2_posts          | pinged                | 0            | SQL  |
| wp_2_posts          | post_content_filtered | 0            | SQL  |
| wp_2_posts          | guid                  | 23           | SQL  |
| wp_2_posts          | post_type             | 0            | SQL  |
| wp_2_posts          | post_mime_type        | 0            | SQL  |
| wp_2_term_taxonomy  | taxonomy              | 0            | SQL  |
| wp_2_term_taxonomy  | description           | 0            | SQL  |
| wp_2_terms          | name                  | 0            | SQL  |
| wp_2_terms          | slug                  | 0            | SQL  |
| wp_3_commentmeta    | meta_key              | 0            | SQL  |
| wp_3_commentmeta    | meta_value            | 0            | SQL  |
| wp_3_comments       | comment_author        | 0            | SQL  |
| wp_3_comments       | comment_author_email  | 0            | SQL  |
| wp_3_comments       | comment_author_url    | 1            | SQL  |
| wp_3_comments       | comment_author_IP     | 0            | SQL  |
| wp_3_comments       | comment_content       | 0            | SQL  |
| wp_3_comments       | comment_approved      | 0            | SQL  |
| wp_3_comments       | comment_agent         | 0            | SQL  |
| wp_3_comments       | comment_type          | 0            | SQL  |
| wp_3_links          | link_url              | 0            | SQL  |
| wp_3_links          | link_name             | 0            | SQL  |
| wp_3_links          | link_image            | 0            | SQL  |
| wp_3_links          | link_target           | 0            | SQL  |
| wp_3_links          | link_description      | 0            | SQL  |
| wp_3_links          | link_visible          | 0            | SQL  |
| wp_3_links          | link_rel              | 0            | SQL  |
| wp_3_links          | link_notes            | 0            | SQL  |
| wp_3_links          | link_rss              | 0            | SQL  |
| wp_3_options        | option_name           | 0            | SQL  |
| wp_3_options        | option_value          | 2            | PHP  |
| wp_3_options        | autoload              | 0            | SQL  |
| wp_3_postmeta       | meta_key              | 0            | SQL  |
| wp_3_postmeta       | meta_value            | 0            | SQL  |
| wp_3_posts          | post_content          | 2            | SQL  |
| wp_3_posts          | post_title            | 0            | SQL  |
| wp_3_posts          | post_excerpt          | 0            | SQL  |
| wp_3_posts          | post_status           | 0            | SQL  |
| wp_3_posts          | comment_status        | 0            | SQL  |
| wp_3_posts          | ping_status           | 0            | SQL  |
| wp_3_posts          | post_password         | 0            | SQL  |
| wp_3_posts          | post_name             | 0            | SQL  |
| wp_3_posts          | to_ping               | 0            | SQL  |
| wp_3_posts          | pinged                | 0            | SQL  |
| wp_3_posts          | post_content_filtered | 0            | SQL  |
| wp_3_posts          | guid                  | 10           | SQL  |
| wp_3_posts          | post_type             | 0            | SQL  |
| wp_3_posts          | post_mime_type        | 0            | SQL  |
| wp_3_term_taxonomy  | taxonomy              | 0            | SQL  |
| wp_3_term_taxonomy  | description           | 0            | SQL  |
| wp_3_terms          | name                  | 0            | SQL  |
| wp_3_terms          | slug                  | 0            | SQL  |
| wp_blog_versions    | db_version            | 0            | SQL  |
| wp_blogs            | domain                | 0            | SQL  |
| wp_blogs            | path                  | 0            | SQL  |
| 
〜省略〜 
| 
| wp_users            | user_url              | 0            | SQL  |
| wp_users            | user_activation_key   | 0            | SQL  |
| wp_users            | display_name          | 0            | SQL  |
+---------------------+-----------------------+--------------+------+
Success: Made 41 replacements.

wp search-replace で独自のテーブルも置換する

さて、WordPress をカスタマイズしていると、新規に独自テーブルを使って機能を開発することもあるかと思います。

wp search-replace の「–all-table」オプションを付けると全てのテーブルが対象になるので、そんな独自テーブルも含めたいときにも便利です。

例えば、URL 文字列を含んだ company テーブルをこのように作ったとします。

そして「–all-table」オプションを付けた形でコマンドを実行。

campany テーブルの URL もちゃんと置換が行われました。

$ wp search-replace --all-tables 'http://example.com' 'http://example.jp'
+---------------------+-----------------------+--------------+------+
| Table               | Column                | Replacements | Type |
+---------------------+-----------------------+--------------+------+
| company             | name                  | 0            | SQL  |
| company             | url                   | 1            | SQL  |
| 
〜省略〜
| 
+---------------------+-----------------------+--------------+------+
Success: Made 1 replacements.

※ちなみに、search-replace のソースを見たところ、「–all-table」の対象テーブルは Primary Key を持ったカラムが存在することが条件のようです。Primary Key を持たないテーブルの方が珍しいかとは思いますが、この点はご注意ください。

まとめ

ドキュメントはちゃんと読むこと!今回のオプション説明も WP-CLI の公式サイトにちゃんと書いてあります(笑)

他にも至れり尽くせり便利なオプションが揃っているので、何か困ったらオプション調べてみるときっと幸せになれるかと思います。

ad

この記事が気に入ったらシェアしてもらえると嬉しいです!

  • このエントリーをはてなブックマークに追加
  • Pocket
  • follow us in feedly
  • RSS

  関連記事

programming_language
プログラミング言語の使い手の呼び名を集めてみました

photo credit: nyuhuhuu via photopin cc プ …

git2xserver
XSERVER に Git をインストールする手順

知人の XSERVER で作業をする機会があったのですが、標準で Git が入っ …

テスト
「SonicGarden Study #05」を見てテストについて感じたこと

先日、Ustreamで配信されたソニックガーデンさん主催のオンライン勉強会「So …

WordPress
WordPressで特定のタグを持つ投稿にだけ共通メッセージを表示させてみる

WordPressの小ネタです。 ある特定のタグを持つ投稿にだけ、本文の先頭に共 …

WordPress
WordPress3.0.1インストール手順まとめ

新しくブログをOPENしました。 以前のサイトではMT4を使っていたので、Wor …

サーバー
VMにUbuntu Server10.10+Apache+PHP+MySQLの開発環境セットアップメモ

Ubuntuインストール 下記サイトよりUbuntu Server 10.10 …

Stinger
WordPressテーマをStingerに変更しました

先日からこのWordPressサイトのテーマを話題の「Stinger」に変更して …

棋士データベースクイックサーチ
将棋棋士データベースで遊ぶ(6)〜クイックサーチ機能を作る〜

※この記事は「将棋 Advent Calendar 2016 – A …

セキュリティ
セキュリティ対策に先手を。WordPressのデフォルトadminユーザーを変更する。

photo credit: hide99 via photopin cc 最近、 …

404 not found
古いUbuntuサーバでapt-getしたら404 Not Foundエラーが発生した件

開発用のVMで使っていた Ubuntu 10.10 server でFTPサーバ …