【コピペOK】Contact Form 7に来る海外スパムメールを「ひらがな必須」で撃退する方法
WordPressのお問い合わせフォームプラグイン「Contact Form 7」を使っていると、英語やロシア語などの海外スパムメールが大量に届くことはありませんか?
reCAPTCHAの設定も効果的ですが、今回はもっとシンプルで強力な「本文にひらがなが含まれていなければ送信させない」というカスタマイズ方法をメモしておきます。
日本国内向けのサイトであれば、この方法だけで海外スパムをほぼ100%シャットアウトできるのでおすすめです。
仕組み
仕組みは単純で、フォームのテキストエリア(お問い合わせ内容)の中に「ひらがな」が1文字も入っていない場合はエラーを出すという処理を追加します。
通常の日本語のお問い合わせであれば、必ずひらがなが含まれるはずです。逆に、海外からのスパムボットはひらがなを入力できません。この特性を利用します。
実装コード
お使いのテーマの functions.php に以下のコードを追記します。 ※念のためバックアップを取ってから作業してください。
PHP
// Contact Form 7: textareaに「ひらがな」を含まなければ送信できないようにする
function wpcf7_validation_textarea_hiragana($result, $tag) {
$name = $tag['name'];
$value = (isset($_POST[$name])) ? (string) $_POST[$name] : '';
// 値があり、かつ「ひらがな」が含まれていない場合
if ($value !== '' && !preg_match('/[ぁ-ん]/u', $value)) {
$result['valid'] = false;
$result['reason'] = array($name => '送信できません(日本語で入力してください)。');
}
return $result;
}
add_filter('wpcf7_validate_textarea', 'wpcf7_validation_textarea_hiragana', 10, 2);
add_filter('wpcf7_validate_textarea*', 'wpcf7_validation_textarea_hiragana', 10, 2);
コードの解説
preg_match('/[ぁ-ん]/u', $value)という部分で、入力内容にひらがなが含まれているかをチェックしています。- もし含まれていなければ「送信できません(日本語で入力してください)。」というエラーメッセージを表示して送信をブロックします。
注意点
この方法は「日本語(ひらがな)が入力できないユーザーからの連絡をすべて拒否する」ことになります。
そのため、海外からの正規の問い合わせを受け付ける必要があるサイトや、グローバルなビジネスを行っているサイトでは使用しないでください。
「日本国内のお客様だけ対応できればOK」というサイトであれば、非常に有効な手段です。
参考
今回のカスタマイズは、以下の記事を参考にさせていただきました。
【コピペOK】ContactForm7にとどく外国語のスパムメールをシャットアウトする – ねたまめ.com

