記事内に広告が含まれています

【ワレコのWEB講座】WordPress Search Regexの使い方

この記事は約9分で読めます。
スポンサーリンク

ワテはWordPressを約7か月くらい使って来て、或る程度使いこなせるようになった。

使い始めた頃は、ダッシュボードの左側に表示されるメニュー

  • メディア
  • リンク
  • 固定ページ
  • コメント
  • 外観
  • プラグイン
  • ユーザー
  • ツール
  • 設定

などの意味が良く分からず、混乱しまくった。

特に初心者の人が迷うと思うのは、

  • 外観 → テーマ、テーマの編集、カスタマイズ、、、
  • 設定 → 一般、投稿設定、表示設定、、、

みたいに、何らかの設定画面が一ヶ所ではなくていろんな場所に隠れているのも原因だと思う。

慣れてしまうとどういう事も無いのだが。

兎に角、ワテはややこしいメニューとか分かりにくいユーザーインターフェースが嫌いだ。

まあ、そんなものを好きな人もいないと思うが。

 

当記事ではそんなWordPressを使う上でとっても便利なプラグインであるSearch Regex プラグインの使い方を解説したい。

スポンサーリンク
スポンサーリンク

Search Regex プラグイン

さて、WordPress に Search Regex というプラグインがある。

これは、全ての投稿記事を検索したり、置換したり出来る機能を持つプラグインである。

大きな特徴としては、正規表現が使えるのだ。

WordPressのプラグインのページを検索してみたが、正規表現が使える検索置換機能のプラグインは、この Search Regex しか見付けられなかった。

それで早速Search Regexプラグインをインストールして使ってみたのだが、簡単な文字列検索や置換は問題なく正常に動くのだが、正規表現を使うと何だか動きがおかしい。

つまり正規表現パターンでの検索や置換が動かないのだ。

 

正規表現には、確かに方言のようなものが存在するので、言語によって微妙に記号の解釈が異なる場合がある。

でも、多くの部分は同じなので、ごく普通の表現、例えば

 

^.*$

 

と入れたら、任意の文字列にマッチするはずなのだが。

でも Search Regex では、全くマッチしない。

説明しなくても、皆さんご存知だと思うが、

^  文字列の先頭

.  任意の一文字

*  直前の文字の 0回以上の繰り返し

$  文字列の末尾

と言う意味だ。

それなら、もっと単純な正規表現パターン、

2016

という文字列なら、本年度(2016)に投稿した記事の本文中にこの2016と言う数字を書いているものもあると思うので、その部分にマッチすると思ったのだが、それでもダメ。下図。

2016-03-04-01-regex-error

Searchボタンをクリックすると英文で、正規表現が不正と出ている。

う~ん、分からん。

少しネットを検索したら、ようやく分かった。

 

 Search Regex で正規表現の使い方

最初に重要な注意

本プラグインを使って

Replace & Save(置換を実行して、上書き保存を行う。)

を実行すると、文字通り置換・保存を実行する。

確認など無くクリックした瞬間に処理が実行されてしまうので注意して下さい。

これは取り消しが出来ないようなので要注意です。

使い方に慣れていない人は、

Search(検索のみ)

Replace(置換するが保存はしない。どんなふうに置換出来るのか確認用。)

を使うのが良い。

 

さて、

Search Regexの正しい使い方は、

|正規表現パターン|

のように入力すると動くようだ。

 

上の例だと

|2016|

で検索すると、

2016-03-04-02-regex-good

となり、期待通り文字列 “2016” にマッチした。

なお、今は設定で

Source: Post content

になっているので、投稿本文のみ検索している。

 

もう少し実用的な正規表現を使うなら、例えば、

Search pattern   |2016/(\d)/(\d)|

Replace pattern   2016年$1月$2日

として、Replaceを実行すると、

2016-03-04-03-regex-good-nen-gatu-hi

となり、期待通り、

2016/M/D

の形式を

2016年M月D日

に変換出来る。

 

注意事項としては、

Replace & Save

を実行すると、文字通り置換・保存を実行する。

これは取り消しが出来ないようなので要注意だ。

なので、Replaceボタンで十分試しておいて、それで問題が無ければ Replace & Save を実行すると良い。ただしUNDOが出来ないので要注意だ。

 

Search Regexのオプション設定

選択項目は三つだけなので簡単だ。

2016-03-04-04-regex-options

それぞれの選択項目の意味

1.Source

何を検索・置換処理の対象とするかの選択だ。

選択項目 意味
Comment author コメントの作成者
Comment author email コメント作成者のメールアドレス
Comment author URL コメント作成者のURL
Comment content コメントの内容
Post content 投稿記事の本文
Post excerpt 投稿記事の抜粋
Post meta value 投稿記事のカスタムフィールド
Post title 投稿記事のタイトル
Post URL 投稿記事のURL

デフォルト値は「Post content」となっているので、投稿記事の本文に書かれている内容が検索・置換の対象となる。

 

2.Limit to:

「Limit to」は一度に置換する上限だ。

デフォルトでは「No limit」となっているので制限が無い。つまり、全ての投稿記事が一気に処理されるので、便利な反面、うっかり Replace & Save を実行してしまうとその通り置換されてかつ保存されてしまうのでUNDO出来ない。要注意だ。

なので使い方に慣れていない場合には、上限を10にしておくと、万一失敗しても10記事のみなので被害は減らせる。

 

3.Order By:

「Order By」は検索を行った時に並べ替えの方法を指定する。

「Ascending」は昇順

「Descending」は降順

デフォルトは「Ascending」となっている。

 

Search Regexのバグ

以下で説明しているバグは本日(2019/7/11)の時点の最新バージョン1.4.16では、少し試した限りでは直っているようです。

このように手軽に正規表現を使って検索・置換が出来る良い機能を持つSearch Regexプラグインであるが、問題がある。

それは、この一年以上バージョンアップされていないのだ。

本日(2016/3/5)時点の最新版では、

バージョン 1.4.15

ZIPを展開して中のファイルの日付を確認したら‎2014‎年‎11‎月‎21‎日

なのだ。

古くても動けば良いのだが、動かない機能がある。

それは、

Source: Post title

として実行すると期待通り動かない。

つまり投稿のタイトルが検索も置換も出来ないのだ。

それも、正規表現を使う、使わないにかかわらず。

要するにタイトルに関しては何も出来ない。

 

少し検索してみたら、これは明らかなバグのようだ。

 

それで、ネット上にはバグ修正例が出ている。

search-regex/searches/post_title.php

というファイルの冒頭にあるfindと言う関数を下記のように修正するのだ。

 

Search Regexのfind関数のバグ修正版

function find ($pattern$limit$offset$orderby)
{
    global $wpdb;
    $results = array ();
    $posts   = $wpdb->get_results ($wpdb->prepare( "SELECT ID, post_content, post_title FROM {$wpdb->posts} WHERE post_status != 'inherit' ORDER BY ID $orderby" ) );
    if ( $limit > 0 )
        $sql .= $wpdb->prepare( " LIMIT %d,%d"$offset$limit );
    if (count ($posts> 0)
    {
        foreach ($posts AS $post)
        {
            if (($matches = $this->matches ($pattern$post->post_title, $post->ID)))
            {
                foreach ($matches AS $match)
                    $match->title = $post->post_title;
                $results = array_merge ($results$matches);
            }
        }
    }
    return $results;
}
 

あくまでネット上にある一つのサンプルなので、内容に関しては責任を持てない。

ワテが動かした限りでは、この修正を加えると、期待通り投稿タイトルに対して、検索や置換の機能が動く。

正規表現も正常に動作するようだ。

まとめ

この記事では、多くのブログサイトや企業サイトで利用されているオープンソースなWordPressで利用出来るSearch Regexプラグインの使い方を解説した。

検索、置換はWordPressで記事を作成する場合に良く使う機能なので、Search Regexを使っている人は多い。

また、正規表現を使える検索・置換プラグインはワテの知る限りこのSearch Regexしかない。

正規表現はとても奥が深くて完全にマスターするのは難しいが、そこまで行かなくても初歩的な機能を覚えるだけでもとても応用が利く。

なので、ワテの場合も、常に新しい正規表現パターンを覚えるなど努力している。

 

Search Regexプラグインの注意

繰り返しますが、上記修正版の関数を利用する場合は自己責任でお願いします。

また、Search Regexプラグインを使って記事本文や記事タイトルなどを置換変更するとUNDO機能が無いようなので、十分に注意が必要です。

数千件の記事を一瞬で置換して上書きしてしまいますので、万一使い方を誤ると一瞬で取り返しの付かない状況になります。

 

正規表現を学ぶ

こんな分厚い本を読みこなせれば、正規表現を完璧にマスター出来るだろう。

 

WordPressを学ぶ

買う前に中身検索機能で本の中身を無料で見られるのでお勧めだ。

 

 

スポンサーリンク
コメント募集

この記事に関して何か質問とか補足など有りましたら、このページ下部にあるコメント欄からお知らせ下さい。

WordPress正規表現
スポンサーリンク
シェアする
warekoをフォローする
スポンサーリンク

コメント