WordPress

【スパム対策】Contact Form 7で英語のみの入力はエラーにする方法

WordPressのサイトの場合、「Contact Form 7」などのプラグインを使ってお問い合わせフォームを比較的簡単に実装することができますが、お問い合わせフォームからスパムメールが来ることもあるかと思います。

「Contact Form 7」はよく使われているプラグインだけに、狙われやすいというのもあるかもしれません。

営業や宣伝などの迷惑メールもありますが、中には海外からのスパムも多くあります。

プラグインのバージョンを最新に保つとともに、しっかりとしたスパム対策を行うことが重要ですが、海外からのスパム対策の一つとして、お問い合わせの入力において日本語が含まれているかどうか判定し、含まれていない場合は送信できないようにする方法を紹介します。

英語のみの入力はエラーにする

海外スパムの多くは、英語のみの内容であることも多いため、お問い合わせの入力が英語のみで、日本語が含まれていない場合はエラーになるようにしてみます。

functions.phpに以下のように記述すればOKです。

function wpcf7_validate_message( $result, $tag ) {
 $value = str_replace(array(PHP_EOL,’ ‘), ”, esc_attr($_POST[‘contact-message’]));
 if (!empty($value)) {
  if (preg_match(‘/^[!-~]+$/’, $value)) {
   $result[‘valid’] = false;
   $result[‘reason’] = array(‘contact-message’ => ‘日本語で入力してください’);
  }
 }
 return $result;
}
add_filter( ‘wpcf7_validate’, ‘wpcf7_validate_message’, 10, 2 );

これだけで、英語のみの文章かどうかチェックすることができ、英語のみの場合は「日本語で入力してください」というエラーが出ます。

「contact-message」と記述している部分は任意の名前ですが、「Contact Form 7」でフォームを設置する際の名前と同じにしてください。

スパム対策としては不十分かも

今回紹介した方法は、あくまでお問い合わせ内容の文章が英語のみかどうか判別しただけで、これをしたからといってスパム対策が完全にできているとは言えません。

むしろ対策としては緩いかと思います。

海外からのスパムが多く、届くメールの内容が英語ばかりの場合はこの方法を試してみて、来なくなったらひとまずはいいかもしれませんが、それでも改善されない時や違った形でスパムメールが届く場合は、他のスパム対策をしっかり行うようにした方がいいです。

「Akismet」というプラグインを使う方法やreCAPTCHAを設定する方法など色々ありますので、試してみてください。

Leave a Comment