2019/08/0818 Shares

Search Regex使用時に「サイトで技術的な問題が発生しています」というエラーメールが届くときの解決方法

サイトで技術的な問題が発生しています

プラグイン Search Regex を使ったあと、「サイトで技術的な問題が発生しています」という件名で以下のようなエラーメッセージが記されたメールが届いていませんか?

Uncaught Error: Call to undefined method SearchRegex::base_url() in /sample.com/public_html/wp-content/plugins/search-regex/view/results.php:26

WordPress をチェックしても表面上はどこも変わっておらず、とくにエラーは見当たらないと思いますが、自分のわからないところで何か重大な問題が起きているのではと不安になりますよね。

このエラーメールに関しては放置していてもとくに問題ありません。でもプラグインを使うたびにメールが届くのはあまり気持ちよくないので、その解決方法をご紹介したいと思います。

メールで届くエラーメッセージ

WordPress 5.2 以降、プラグイン Search Regex で検索または置換すると、以下のようなメールが届きます。
※ディレクトリ名などは環境によって異なります

件名:[ブログタイトル] サイトで技術的な問題が発生しています

こんにちは!

WordPress 5.2から、サイトでプラグインやテーマが致命的なエラーを発生させた場合にそれを検知してこの自動メールでお知らせする機能が追加されました。

今回の場合、WordPress がプラグイン Search Regex でエラーを捉えました。

まずはじめに、ご自分のサイト (https://sample.com/) を開き、表示上の問題がないか確認してください。次に、エラーが発生したページ (https://sample.com/wp-admin/tools.php?page=search-regex.php) を開き、表示上の問題がないか確認してください。

この問題をさらに調査するにはサーバーホストに連絡してみてください。

もしサイトが壊れていてダッシュボードに正常に接続できない場合、WordPress には特別なリカバリーモードがあります。これによりダッシュボードに安全にログインし、さらに調査をすることができます。

https://sample.com/wp-login.php?action=enter_recovery_mode&rm_token=xxxxxx&rm_key=yyyyyy

サイトを安全に保つため、このリンクは 1日 で有効期限が切れます。とはいえご心配なく。有効期限後でもこのエラーが再度発生すれば新しいリンクが送られてきます。

エラー詳細
===============
エラータイプ E_ERROR が /home/sample/sample.com/public_html/wp-content/plugins/search-regex/view/results.php ファイルの 26 行目で発生しました。 エラーメッセージ: Uncaught Error: Call to undefined method SearchRegex::base_url() in /home/sample/sample.com/public_html/wp-content/plugins/search-regex/view/results.php:26
Stack trace:
#0 /home/sample/sample.com/public_html/wp-content/plugins/search-regex/search-regex.php(130): include()
#1 /home/sample/sample.com/public_html/wp-content/plugins/search-regex/search-regex.php(116): SearchRegex->render(‘results’, Array)
#2 /home/sample/sample.com/public_html/wp-includes/class-wp-hook.php(286): SearchRegex->admin_screen(”)
#3 /home/sample/sample.com/public_html/wp-includes/class-wp-hook.php(310): WP_Hook->apply_filters(”, Array)
#4 /home/sample/sample.com/public_html/wp-includes/plugin.php(465): WP_Hook->do_action(Array)
#5 /home/sample/sample.com/public_html/wp-admin/admin.php(253): do_action(‘tools_page_sear…’)
#6 /home/sample/sample.com/public_html/wp-admin/tools.php(10): require_once(‘/home/uszero/na…’)
#7 {main}
thrown

こんなメールが届くと慌ててしまいますが、ブログは正常に表示されており、管理画面にもログインできるはずです。

「実は今までも内部でエラーが出ていたけど、表面化されていなかった&問題なく動作していたため気づかなかった」のだと思います。

WordPress 5.2 の新機能で初めて気づいた方がほとんどではないでしょうか(僕もそのひとりです……)。

エラーの意味

「エラー詳細」の 1 行目でエラー発生箇所が明記されています。

search-regex/view/results.php ファイルの 26 行目で発生しました

該当箇所を見ると、こんなコードがありました。

<img src="<?php echo plugins_url( '/images/small.gif', $this->base_url() ); ?>" style="display: none" alt="pre"/>

コードの中にある $this->base_url() という部分がきちんと定義されていないのがエラーの原因みたいですね。ここを直せば解決します。

Search Regex エラー解決方法

このエラーの解決方法は大きく 2 つあります。どちらかひとつ、わかりやすいほうを試してみてください。

失敗してもプラグインをインストールし直せば大丈夫ですけど、念のためバックアップしておきましょう。

WordPress 管理画面からでも編集できますが、できれば FTP で該当ファイルをダウンロードして編集するのをおすすめします。

解決方法(1)search-regex.php を編集する

ひとつめは search-regex.php にコードを追記する方法です。

追記するコードはこちら。

function base_url() {
	return __FILE__;
}

コードを入れる場所は 139 行目の下です。

search-regex.php 編集箇所

WordPressプラグイン編集画面

■編集前

<?php
	}
}

if ( is_admin() ) {
	add_action( 'init', array( 'SearchRegex', 'init' ) );
}
■編集後

<?php
	}
	function base_url() {
		return __FILE__;
	}
}

if ( is_admin() ) {
	add_action( 'init', array( 'SearchRegex', 'init' ) );
}

全角スペースなどが入らないよう注意しましょう。

解決方法(2)view/results.php を編集する

もうひとつは、view/results.php の 26 行目(エラーメールで指摘された箇所)を編集する方法です。

view/results.php 編集箇所

WordPressプラグイン編集画面

$this->base_url()dirname(__FILE__) に変更します。

■編集前

<img src="<?php echo plugins_url( '/images/small.gif', $this->base_url() ); ?>" style="display: none" alt="pre"/>
■編集後

<img src="<?php echo plugins_url( '/images/small.gif', dirname(__FILE__) ); ?>" style="display: none" alt="pre"/>

解決方法まとめ

Search Regex を使ったときにエラーメールが届く場合は、以下のどちらかで対処してください。

  • search-regex.php を編集する
  • view/results.php を編集する

正規表現を使わず指定した文字列を置換するだけなら、「Better Search Replace」というプラグインもおすすめです。このプラグインは、投稿・固定ページだけではなく、カスタム投稿やウィジェットなどの文字列も置換可能です。

Search Regex は 3 年以上更新されていないので、今後別のプラグインを検討したほうがよいかもしれませんね。

それでは、また。