ワードプレスお問い合わせフォーム英語のみのメールを拒否する方法MW WP Form編
2024年02月19日
本日はワードプレスで簡単にお問い合わせフォームを設置することができるプラグインMW WP Formを使用した際にまれに届く英語のみのメールを拒否する方法をご紹介させていただきます。
今までは、月に1度から2度外国の方からお問い合わせフォームからメールが届いていました。スパムかどうかはわかりませんが、内容はそんなに変な内容ではなくアメリカの介護施設の紹介や一般企業のメールアドレスから英字だけで機械的に送られているような内容が届いていました。
特にきにしていませんでしたが、今日は1日で9件届きちょっと邪魔くさくなり対処したので、その対処方法を書かせていただきます。
解決方法はとても簡単でfunctions.phpにちょっと記述するだけでした。ぺージの最後にコピペできるようにコードを張らせていただいております。
- 英語のメールを拒否りたい?
- MW WP Formのバリデーションをカスタマイズしたい?
- 記事は若干いい加減でもいい
- 少しでも為になれば
どんなメールが届いているの?

上記の様に英語の名前が電話やメール以外に記入されたものが本日9件とどきました。
機械的に送られてきているようで特に意味はなさそうなメールですが、たまになら無視でいいですが量が増えるとちょっと邪魔くさいですね。
邪魔っていうのもありますが、メールが届くたびに
「おっ、お問い合わせか??」
と期待を裏切られるのもちょっとイラっとしてきたので、対策をしました。
やりたい内容としては、上記のような機械的なメールは今まですべて英字できていましたので、お問い合わせ内容の記入欄に英語のみで書いてある場合はエラーを出力させてメールを送信できないようにしました。※英語のみの文章をエラー
先に失敗したやり方を紹介。
MW WP Formはバリデーション(検査機能)が豊富なので、チェックをいれるだけでできると思ってやってみたら、ちょとだけ失敗したので、失敗事例も先に紹介させていただきます。
まずやったことは
MW WP Formのバリデーションの確認です

現状は内容確認は必須項目にしていますので、必須項目にチェックが入っています。
もともとMW WP Formはデフォルトでバリデーションが豊富で、上記画像の赤枠で囲ってある部分の好きな物にチェックをいれるだけで、禁止事項にしてくれます。
失敗事例①
失敗事例①は上記のデフォルトの機能に「ひらがなまたはカタカナ」のチェックがあるのでこちらで試してみました。

チェックをいれるだけで簡単に「ひらがなまたはカタカナ」で記入していないとエラーがでてメールが送れなくなりました。
成功!!
と思いましたが、この状態だとお問い合わせ内容の文面の中に英語がすこしでも入っていたらアウトになりました。
サイト見本のURLやメールアドレスなどが記入できなくなり、本来届いてほしいメールまでもがエラーが出てしまします。
失敗です。(というか今回のやりたいことにあっていません。)
※今回は英語のみの文章を送れないようにしたい。英語と日本語の複合で送れるようにしたい
失敗事例②
上記のやり方でだめだったので、もう一個チェックを付け加えてみました。

「半角英数字」というチェックもあったのでこちらにもチェックをいれてみました。
さっきは「ひらがなまたはカタカナ」だけで今回「半角英数字」もいれたのでなんかできそう。
成功!!!
いや失敗です。
こちらの場合は日本語のみでいれると、半角英数字で入力してください。とでてきて、英語だけで入力すると、ひらがなまたはカタカナで入力してくださいとでてきて、なにもできない状態になってしまいました。
複合したものをやりたのでこれも失敗に終わりました。
解決方法!結局ググる
自分で簡単に解決できると思って上記を試しましたが、できなかったので結局グーグルで検索したらあっさりヒット。
functions.phpに下記の文章をコピペするだけで、管理画面に「日本語を含む」のチェック項目が作成され、英語だけの文章だとエラーが出る状態が可能になりました。
■英語だけの文章はダメ
■英語だけの文章はダメだけど日本語も入っていたら英語がはいっていてもOK
これができました。
コードはこちら
//////////////////////////////////////日本語を含まないとエラーバリデーションmw wp form
if ( class_exists( 'MW_WP_Form_Abstract_Validation_Rule' ) ) {
class MW_WP_Form_Validation_Rule_Japanese extends MW_WP_Form_Abstract_Validation_Rule {
protected $name = 'japanese';
public function rule( $key, array $options = array() ) {
$value = $this->Data->get( $key );
if ( is_null( $value ) ) {
return;
}
if ( preg_match( '/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]/u', $value ) ) {
return;
}
$defaults = array(
'message' => '日本語含んだ文章で入力してください。'
);
$options = array_merge( $defaults, $options );
return $options['message'];
}
public function admin( $key, $value ) {
?>
<label><input type="checkbox" <?php checked( $value[ $this->get_name() ], 1 ); ?> name="<?php echo MWF_Config::NAME; ?>[validation][<?php echo $key; ?>][<?php echo esc_attr( $this->get_name() ); ?>]" value="1" />日本語を含む</label>
<?php
}
}
function mwform_validation_rule_japanese( $validation_rules ) {
$instance = new MW_WP_Form_Validation_Rule_Japanese();
$validation_rules[$instance->get_name()] = $instance;
return $validation_rules;
}
add_filter( 'mwform_validation_rules', 'mwform_validation_rule_japanese' );
}
//////////////////////////////////////日本語を含まないとエラーバリデーションmw wp formこれをいれるだけで管理画面がこんな感じで日本語を含むのチェックが一番下に出現します。

出現してきた「日本語を含む」にチェックを入れて更新すれば完了です。
やっぱググるべきですね。
こちらのコードは下記のサイト様からコピーさせていただきました。
まじで助かりました。ありがとうございます。
プログラム系は基本簡単なカスタマイズぐらいしかできないので、こうやってコードを書いていただけるのは本当に助かります。
参考サイト様はこちら
まとめ
ちょっと解決するまで少し失敗しましたが、作業内容自体はコピペで簡単に英語のみをブロックすることができました。
とりあえず、この状態で様子をみて、英語だけのメールが届かないか数日間チェックしてみたいと思います。
ワードプレスでMW WP Formを利用していて英語の迷惑メールに困っている方は是非参考にしてみて下い。
こちらのやり方に1点だけ注意点があり、海外の方とやりとりをされている場合はこのやり方は通用致しません。本当に届いてほしい海外の方からのメールもブロックされるので、ほかのやり方、 reCAPTCHAなどの設置対応が必要です。
ここがチェケラ
スパムってなくならないね!
それではまた。