当記事はアフィリエイト広告を利用しています。
Contact Form 7を使っていると、突然英語やランダムな英字ばかりのお問い合わせが大量に届くことがあります。
私のサイトでも、意味の分からない英字が並んだスパムが何度も送られてくるようになりました。
毎日のように届くと、本当に必要なお問い合わせが埋もれてしまうので困りますよね。
そこで行ったのが、Contact Form 7のお問い合わせ内容に「ひらがなを1文字以上含めなければ送信できない」という条件を追加する方法です。
日本人向けのブログやWebサイトなら、この方法だけでも英字のみのスパムをかなり減らすことができます。
しかも、Code Snippetsなどのプラグインを新しく追加する必要はありません。
この記事では、子テーマのfunctions.phpを使ってContact Form 7の英語スパムを防ぐ方法を、できるだけ分かりやすく紹介します。
Contact Form 7を設置していると、海外からと思われる英語のお問い合わせが大量に届くことがあります。
例えば、次のような内容です。

普通のお問い合わせとは思えない英単語やURLが並んでいる場合、自動プログラムによって送信されているスパムの可能性があります。
日本人向けのサイトの場合、正規のお問い合わせには「です」「ます」「ください」など、何らかのひらがなが入っていることがほとんどです。
そこで、「お問い合わせ本文にひらがなが1文字も入っていなければ送信できない」というルールを追加します。
これだけでも、英字だけで構成された単純なスパムをかなり弾くことができます。
今回は、WordPressの子テーマにあるfunctions.phpへコードを追加します。
SWELLを使っている場合は、親テーマではなくSWELL子テーマのfunctions.phpを使用してください。
一般的には、次の場所にあります。
/wp-content/themes/swell_child/functions.php
functions.phpを開いたら、一番下に次のコードを追加します。
// Contact Form 7:お問い合わせ本文に「ひらがな」が含まれているかチェック
function validate_textarea_hiragana($result, $tag) {
$name = $tag->name;
// お問い合わせ本文だけを対象にする
if ($name !== 'your-message') {
return $result;
}
$value = isset($_POST[$name])
? sanitize_textarea_field(wp_unslash($_POST[$name]))
: '';
if ($value && !preg_match('/[ぁ-ん]/u', $value)) {
$result->invalidate(
$tag,
'お問い合わせ内容には、ひらがなを1文字以上含めてください。'
);
}
return $result;
}
add_filter(
'wpcf7_validate_textarea',
'validate_textarea_hiragana',
10,
2
);
add_filter(
'wpcf7_validate_textarea*',
'validate_textarea_hiragana',
10,
2
);
コードを追加したら、functions.phpを保存します。
これで基本的な設定は完了です。
ここで必ず確認してほしいのが、コード内にある「your-message」という部分です。
該当するのは、次の部分です。
if ($name !== 'your-message') {
「your-message」は、Contact Form 7のお問い合わせ本文に設定されているフォームタグの名前です。
WordPress管理画面から、「お問い合わせ」→「コンタクトフォーム」→使用しているフォームを開いてください。
お問い合わせ本文の欄を確認します。
例えば、次のようになっている場合です。

Contact Form 7側の例
[textarea* your-message]
この場合は、先ほどのコードをそのまま使用できます。
一方、次のようになっている場合は変更が必要です。
フォームタグ名が異なる例
[textarea* message]
この場合は、コード内の「your-message」を「message」へ変更してください。
重要
Contact Form 7側のテキストエリア名と、functions.php側の名前を必ず一致させてください。
設定が完了したら、実際にお問い合わせフォームで確認してみましょう。
例えば、お問い合わせ内容に次の文章を入力します。
送信できない例
Hello! I want to contact you.
この文章には、ひらがなが1文字も含まれていません。
そのため、送信しようとするとエラーになります。
表示されるエラーメッセージ
お問い合わせ内容には、ひらがなを1文字以上含めてください。
一方、次のような文章なら正常に送信できます。
送信できる例
商品の詳細について教えてください。
「ください」というひらがなが含まれているため、送信できます。
functions.phpを変更したあとは、必ず実際のお問い合わせフォームから送信テストをしてください。
最低でも、次の2パターンを確認しておきます。
日本語のお問い合わせまで送信できなくなっている場合は、Contact Form 7のフォームタグ名を確認してください。
特に「your-message」の部分が正しいかをチェックします。
WordPressテーマのfunctions.phpにコードを追加するときは、できるだけ親テーマを直接編集しないようにしてください。
親テーマをアップデートすると、追加したコードが消えてしまう可能性があります。
SWELLを使用している場合は、SWELL子テーマのfunctions.phpへ追加します。
注意
functions.phpは、記述を間違えるとWordPressでエラーが発生することがあります。
編集する前に、元のfunctions.phpをコピーして保存しておくと安心です。
functions.phpを直接編集するのが不安な場合は、Code Snippetsなどのコード管理用プラグインを使う方法もあります。
コードをプラグイン側で管理できるため、functions.phpを直接編集する必要がありません。
ただし、すでに子テーマを使用していてfunctions.phpを編集できるのであれば、今回の対策だけのために新しいプラグインを追加する必要はありません。
プラグインをできるだけ増やしたくない場合は、子テーマのfunctions.phpを使う方法がシンプルです。
ひらがな必須の設定は簡単で効果的ですが、すべての迷惑メールを完全に防げるわけではありません。
例えば、スパム本文に「あ」や「です」などのひらがなが含まれていれば、今回のチェックを通過する可能性があります。
この対策が特に有効なスパム
英字・英単語・URLだけで送られてくる単純な海外スパムや自動送信スパムです。
つまり、今回の方法は「英字だけで送られてくる大量の自動スパムを減らす対策」と考えると分かりやすいです。
さらに高度なスパムが増えてきた場合は、Cloudflare Turnstileなど別のスパム対策との併用も検討するとよいでしょう。
今回の設定には、一つ大きな注意点があります。
ひらがなを必須にすると、英語だけで書かれた正規のお問い合わせも送信できなくなります。
そのため、海外ユーザーからのお問い合わせを想定しているサイトには向いていません。
例えば、次のようなサイトでは注意が必要です。
反対に、ほぼ日本人しか利用しない個人ブログや日本国内向けサイトなら導入しやすい方法です。
Contact Form 7から大量の英語スパムが届く場合は、お問い合わせ本文にひらがなを1文字以上必須にする方法があります。
今回紹介した方法なら、新しいスパム対策プラグインを追加しなくても設定できます。
メリットをまとめると、次のとおりです。
私の場合も、意味のない英字が並んだお問い合わせが大量に届いたことがきっかけで対策することにしました。
同じようにContact Form 7の海外スパムや英語スパムに困っている方は、今回の方法を試してみてくださいね🌸