前回の記事では、スパム対策として以下の3つを紹介しました。
- reCAPTCHA v3 または Cloudflare Turnstile
- ハニーポットの設置
- お問い合わせ内容に「日本語必須」バリデーションを追加する
今回は、WordPress + Contact Form 7 を使った実際の実装方法を詳しく解説します。
目次
1. reCAPTCHA v3 または Cloudflare Turnstile の導入方法
1-1.Google reCAPTCHA 管理画面にアクセス
1-2.新規登録
- タイプ:reCAPTCHA v3
- ドメイン:あなたのサイトのドメイン
キー(サイトキー / シークレットキー)が発行されます。
1-3.Contact Form 7 にキーを設定
WordPress 管理画面
「お問い合わせ」→「インテグレーション」
▼ reCAPTCHA を選択してキーを貼り付ける。

2. Contact Form 7 にハニーポットを追加する方法
ハニーポットとは、「人間が入力できないフィールドを置き、入力されたらスパム判定」する手法です。
2-1.Contact Form 7にフィールドを追加
[text honeypot class:honeypot]
2-2.functions.phpへ下記を追加
add_filter( 'wpcf7_validate_text', 'my_honeypot_validation', 10, 2 );
add_filter( 'wpcf7_validate_text*', 'my_honeypot_validation', 10, 2 );
function my_honeypot_validation( $result, $tag ) {
$name = $tag->name;
if ( $name === 'honeypot' ) {
$field_value = isset($_POST[$name]) ? trim($_POST[$name]) : '';
if ( !empty($field_value) ) {
// スパム扱い
$result->invalidate( $tag, "エラー:不正な送信です。" );
}
}
return $result;
}
2-3.CSSでハニーポットを見えない位置に移動
.p-contact .honeypot {
position: absolute;
left: -9999px;
}
これで、人間の目からは見えない位置にあるフィールドが入力されたらエラーを返すハニーポットが設置できました。
3.お問い合わせ内容に「日本語必須」バリデーションを追加する方法
お問い合わせ内容(textarea)が 日本語を含まない場合エラーにする方法です。
3-1.Contact Form 7にフィールドを追加
[textarea textarea class:textarea]
3-2.functions.phpへ下記を追加
add_filter( 'wpcf7_validate_textarea', 'check_textarea_contains_japanese', 20, 2 );
add_filter( 'wpcf7_validate_textarea*', 'check_textarea_contains_japanese', 20, 2 );
function check_textarea_contains_japanese( $result, $tag ) {
// 対象フィールド名を限定(name="textarea" のみ)
$target_name = 'textarea';
$name = $tag->name;
if ( $name !== $target_name ) {
return $result; // 対象外はそのまま
}
// POST から値を取得(CF7 が既にサニタイズしているが念のため trim)
$value = isset( $_POST[ $name ] ) ? trim( wp_unslash( $_POST[ $name ] ) ) : '';
// 日本語(ひらがな・カタカナ・漢字)が1文字でも含まれているかをチェック
if ( ! preg_match( '/[\p{Hiragana}\p{Katakana}\p{Han}]/u', $value ) ) {
// エラーメッセージ
$result->invalidate( $tag, '日本語でお願いします。' );
}
return $result;
}
これで、textareaに日本語が含まれていないとエラーとなるバリデーションを追加できました。
まとめ
reCaptcha、Turnstile、ハニーポットの設置や日本語必須バリデーションを組み合わせることで、スパムをほぼゼロにできます。