2020年5月15日

ContactForm7でスパムが急増したときにfunctions.phpを編集して対応できる方法

WordPressで問い合わせフォームを設置する場合、多くの場合はプラグインで対応、その中でも「Contact Form 7」を利用することが多いのではないでしょうか。

しかしこの「Contact Form 7」、利用者数の多いプラグインであるから故に、スパムメールのターゲットになっている事でも有名で、海外から多くのスパムメールが届くようになってしまう事が多々あります。

今回はContactForm7でスパムが急増したときに、「Akismet」等のスパム対策プラグインを使わずに、functions.php に追記することで対応する方法を書いていきます。

日本語の有無に対して入力チェック(バリデーション)をかける

スパムメールの多くは海外から送信されてくる=英語のみの内容であることが多いです。そこで対応方法としては functions.php に、以下のように追記して、英語のみである場合はエラーとするよう入力チェックをかけるようにします。

※記述にミスがあるとサイトが表示されなくなる恐れがありますので、必ずバックアップをとる等ご対応下さい。
※「your-message」に対して入力チェックをかける例です。

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

この対応方法のデメリット

入力チェックの条件として「英語のみの内容は受け付けない」という事になりますので、例えば外国人向けのサイトで外国人からの問い合わせを受ける前提である場合、この方法は使えません。その場合はスパム対策プラグイン等の活用も検討してみると良いかと思います。

以上、ContactForm7でスパムが急増したときにfunctions.phpを編集して対応できる方法でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です