最終更新日:

Snow Monkey Formsで日本語入力がない場合に管理者宛メールを送信しないようにする方法

Snow Monkey Formsスパム対策

こんにちは。五平餅くんです。

最近MW WP Formsの開発が終了し、プラグインを「Snow Monkey Forms」に変更したという方は多いのではないかなと思います。

私も先日、Snow Monkey Formsのフォームを使用したサイトで、「スパム対策をもっと強化したいので日本語入力を必須にしたい」というご要望がありました。

「スパム対策をもっと強化したいので日本語入力を必須」ということは、例えば「お問い合わせ内容」などで長いテキストの入力欄に、英語や数字のみしかない場合は送信させないというルールを追加するというものです。

Snow Monkey Formsでは「必須設定」や「メールアドレスの形式かどうかのチェックする設定」はあるものの、調べても調べても「日本語が含まれていないお問合わせを拒否する」カスタマイズ方法がわからず苦戦しました。

そして、唯一の解決策を見つけました。

今回は「Snow Monkey Formsで日本語入力を必須にする方法」についてお話ししていきます。

解決策:functions.phpに追加するコード

まずは結論です。

下のコードをfunctions.phpに追加してください。コピペでいけると思います。

//Snow Monkey Formsスパム対策

// 管理者メールの送信をスキップする
add_filter( 'snow_monkey_forms/administrator_mailer/skip', function( $skip, $responser, $setting ) {
  $message = $responser->get( 'message' ); // 対象の項目の name を指定

  if ( ! preg_match( '/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]/u', $message ) ) {
    $skip = true;
  }

  return $skip;
}, 10, 3 );

※「message」 のところだけ、使用されるinputやtextareaなどのname属性に置き換えてください。

解説:日本語が含まれていない場合にメール送信をスキップする

※とりあえず実装だけしたい方は、ここの説明は飛ばしてもOKです。

「snow_monkey_forms/administrator_mailer/skip」というフックを利用します。

このフックは、特定の条件の時に管理者宛のメール送信をスキップするかどうかを制御するフックです。

特定の条件とは、今回の場合は「日本語が含まれていない」場合ということになります。

概要するコードは下の部分です。

  $message = $responser->get( 'message' ); // 対象の項目の name を指定

  if ( ! preg_match( '/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]/u', $message ) ) {
    $skip = true;
  }

$skip = true にすると、メール送信をスキップする設定になります。

これにより、日本語が含まれていない時に管理者宛のメール送信をスキップする設定が完了です。

ちなみに、こちらのコードを追加しても、フォームを送信したユーザーへの自動返信メールについては、日本語が含まれていない時にも送信されます。

しかし、今回はスパム対策なので、管理者宛のメールに届かなければOKです。

まとめ:Snow Monkey Formsを使いこなそう

今回は以上になります。

最近MW WP Formsが開発終了したということで、私の方でも順次Snow Monkey Formsに移行中です。

MW WP Formsに比べるとSnow Monkey Formsは操作が簡単なのですが、カスタマイズという観点からすると「MW WP Formsの方が使いやすかった」という感はあります。

でも、Snow Monkey Formsも工夫すればいろんなことができるはず!

Snow Monkey Formsのカスタマイズに関する記事をこれからも増やしていきますね。

最後まで読んでいただきありがとうございました!

参考記事:https://motoki-design.co.jp/wordpress/snow-monkey-forms-hook/#index_id4

関連記事

人気記事