WordPress

Search Regex プラグインで記事の文字列を一括置換する

このブログは昔Movable Typeを使っていたんですが、そういえばWordPressでは標準で、記事を検索して文字列を置き換える機能がないなぁということに今更ながら気づきました。で、正規表現も使って文字列の置き換えが出来るSearch Regexというプラグインを入れました。

Search Regex — WordPress Plugins

Search Regexは、データに変更を加える前にマッチの結果と置換をプレビューでき、コード内で使用する正規表現と同じようにデリミタにスラッシュ以外の記号が使えます。WordPress上の管理画面で文字列の一括置換をする場合、失敗に備えてバックアップはどうするんだという面倒はありますが、置換結果のプレビューができれば少し安心です。また、URLなど検索パターンにスラッシュ(/)が多いことも予想されるので、デリミタが指定できるとバックスラッシュだらけのパターンを回避しやすくて助かります。

とはいえ一度置き換えしてしまうと元に戻すことはできないので、技術的に不安があったりバックアップが取れないようであればあまりオススメできません。細心の注意を払って自己責任のうえで使用してください。

ちなみに、テスト環境から本番へ移設する時みたいに、サイトのURLやメディアのURLの書き換えが必要な場合は、そのためのスクリプトが用意されているのでそちらを使うようにします。こちらも慎重を要するスクリプトですが、また気が向いたら別記事にでも覚え書きしたいと思います。
Database Search and Replace Script in PHP

インストール

Search Regex — WordPress Plugins からダウンロードするか、「プラグイン › 新規追加」からSearch Regexで検索します。

WordPress Plugin 'Search Regex' 有効化

インストールできたら有効化します。普段から頻繁に使用するつもりでもなければ、使わない時は無効にしておくかアンインストールしておいていいと思います。

Search Regex の画面

Search Regexの画面は、メニューの「ツール › Search Regex」から表示します。

WordPress Plugin 'Search Regex' メニュー › ツール › Search Regex

WordPress Plugin 'Search Regex'
Search Regex の画面には、以下のような注意書きがあります。
  • 'Replace & Save'というボタンを押さない限りプレビューしかしない。」
  • 「発生したいかなる損害にも責任は負わない。DBのバックアップを強くお勧めする。」

選択項目・入力フィールド

Source
検索の対象にするデータを選択します。初期設定では「Post content(記事本文)」。コメントのデータや記事のタイトル、メタデータなどが選択できます。
  • Comment author … コメント投稿者
  • Comment author email … コメント投稿者のメールアドレス
  • Comment author URL … コメント投稿者のURL
  • Comment content … コメントの本文
  • Post content … 記事の本文
  • Post excerpt … 記事の抜粋
  • Post meta value … 記事のメタデータやカスタムフィールド
  • Post title … 記事のタイトル
  • Post URL … 記事のURL
Limit to:
使ってないのでよく分からないのですが、一度に置換する上限だと思います(設定してもプレビューは全て表示されます)。おそらく数百〜数千といった大量のヒットがあった場合に備えて少しずつ処理できるようになっているんだと思います。
Order by:
対象データの並びを「Ascending(昇順)」か「Descending(後順)」で指定します。
Search pattern
置き換えしたい検索対象の文字列、または正規表現のパターンを指定します。正規表現はデリミタで囲む必要があります。
Replace pattern
マッチした部分を置き換える文字列を指定します。
Regex:
正規表現を使う場合はチェックします。
case-insensitive:
大文字小文字を無視する場合はチェックします。
multi-line:
検索対象の文字列を複数行として扱うにはチェックします。行頭を表すメタ文字(^)や行末を表すメタ文字($)が各行でマッチするようになります。
dot-all:
正規表現のドット(.)を改行にもマッチさせるにはチェックします。
Search ››
検索して結果のプレビューを表示します。
Replace ››
検索と置き換えのプレビューを表示します。
Replace & Save ››
置き換えを行なってデータを保存します。

Search Regexで正規表現を使う場合は、PHPコードで書くようなデリミタが必須になります。スラッシュに限らないので、少なくともバックスラッシュだらけのURLの検索パターンとかはちったぁマシになります。スラッシュ以外のデリミタでは、カッコ({})のように対になったものや、パイプ(|)がありますが、いずれにしても検索パターンの中で機能させる記号と被らないようにしないといけません。

// [href][src][link]の各属性の値に指定されている
// ドメイン old.example.com を全て https://new.example.com に変更する

Search pattern  
Replace pattern 

今のところは、このプラグインでまったく不便を感じていませんが、また不具合があったり他にいいのを見つけたら書きたいと思います。