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

  関連記事

WordPressが使える無料レンタルサーバー
WordPressが簡単に使える無料レンタルサーバーを試してみた

先日公開した「pigeon」は、サイトを作る人も利用する人もいかに簡単に扱えるか …

MySQL
MySQLで実行されたSQLクエリをログ出力する設定

MySQL で実行された全ての SQL クエリをログ出力する設定方法について。 …

CentOS
CentOSでコンソールが文字化けするのをLocale変更して直す

CentOSにSSHでログインしてコンソールをいじってると、マルチバイト文字が文 …

前橋育英
2017年センバツ出場校WebサイトにリボンをかけるChrome拡張を作ってみました

あれこれ忙しいことが続くと、自分が楽しめるものでも作って現実逃避したくなりますね …

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

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

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

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

unsplash
JPG画像サイズ圧縮ツール「jpegoptim」のインストールと実行サンプル

Google の PageSpeed Insights でもJPEG画像を圧縮す …

VNC
Ubuntu 12.04 にVNCでリモート接続するための設定手順

Ubuntu 12.04 LTS に Windows からリモート接続できるよう …

Dropbox
BackWPupプラグインでDropboxへのバックアップがAPIエラーになる場合の対処方法

BackWPup というプラグインを使って、WordPress のバックアップを …

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

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