正規表現を使って投稿した記事のテキストを検索・置換できる「Search Regex」というWordpressプラグインがありました。これは便利だ。
最近、引用の仕様を変えたのですが、仕様変更に伴って、過去に投稿した記事の中にあるテキストを書き換える必要が出てしましました。
数が少なければ全部手動で編集し直せばいいのですが、既に1,500本以上ある記事を全て開いて編集し直すというのは、あまり現実的ではありません。
で、最終的にどうしたかというと、DB(データベース)を直接開いて、検索・置換しました。具体的には以下のようなSQLを走らせました。
UPDATE `wp_posts` SET post_content=REPLACE(post_content,'検索する文字列','置換する文字列');
とりあえずこれで対応したのですが、今後も仕様変更で一括置換する必要性が出てきたりするかも。でも、DBを直接いじってデータぶっ飛ばすと怖いので、出来るだけDBを直接いじりたくない…
一括して記事を検索・置換出来るプラグインを探せ
というわけで、すでに投稿されている全ての記事を一気に検索・置換出来るWordPressのプラグインを探してみたところ、「Search Regex」というプラグインがありました。正規表現も使えます。
Search Regex adds a powerful set of search and replace functions to WordPress.
WordPress › Search Regex « WordPress Plugins
インストールすると「ツール」の中に「Search Regex」という項目があらわれます。
「Source」は検索範囲を指定することが出来ます。指定できる検索範囲は以下の通り。いっぱいありますが、普通は「Post content」や「Postcontent」くらいしか使わないのではないかと思います。
- Comment author
- Comment author email
- Comment author URL
- Comment content
- Post content
- Post excerpt
- Post meta value
- Post title
- Post URL
- Sniplet Content
- Tag Name
- Tag slug
「Search pattern」は検索する文字列を、「Replace pattern」は置換する文字列を、それぞれ入力します。もちろん、検索だけする場合は「Search pattern」でOKです。
「Regex」のチェックボックスにチェックを入れると、正規表現を使った検索・置換が出来るようになります。
また、「Regex」にチェックを入れると、横にさらにチェックボックスがあらわれますが、それぞれの意味は以下の通り。
- case-insensitive – PHPのパターン修飾子の「i(PCRE_CASELESS)」に相当。大文字と小文字を区別しなくなります。
- multi-line – PHPのパターン修飾子の「m(PCRE_MULTILINE)」に相当。「行頭」および「行末」メタ文字が、文字列の最初と最後に加えて、各改行の直前と直後にそれぞれマッチするようになります。
- dot-all – PHPのパターン修飾子の「s(PCRE_DOTALL)」に相当。パターン中のドットメタ文字が改行を含む全ての文字にマッチするようになります。
上の説明でピンと来ない場合は、以下のphpのマニュアルを参照してください。
正規表現での検索・置換の仕方はpreg関数と同じようです。その辺は説明すると長くなりますし、自分もちゃんと理解していないので、正規表現について書かれたページや本を参考にしてください。
関連リンク
- WordPress › Search Regex « WordPress Plugins
- Search Regex – WordPress search with regular expressions | Urban Giraffe