問い合わせフォームを通じて、迷惑メール(スパム)が大量に届くようになり、困っていませんか?
具体的には、以下のような内容のスパムが頻繁に送られてきています:
- 営業メール、投資勧誘、出会い系、アダルト系
- 英語や意味不明な文章の羅列
- 不審なリンクを含む宣伝目的のメッセージ
- 同じIPアドレスから短時間で連続して送信される投稿
この影響で、本来のユーザーからの正当な問い合わせを見落とすリスクがあるほか、運用面でも負担が増えています。
対策として以下のような対応を検討しています:
- NGワードフィルターの強化
- 特定のIPアドレスやドメインのブロック
- reCAPTCHAの導入
- honeypot機能などのスパムボット対策
Contact Form 7(CF7)にNGワード(禁止語句)を設定するには、以下のいずれかの方法で実装できます
✅ 方法1:functions.phpにフィルターフックを追加(推奨)
CF7の wpcf7_validate_*
フックを使って、NGワードを検出してバリデーションエラーを返します。
例:テキストフィールド(your-message
)にNGワードを設定する場合
add_filter('wpcf7_validate_textarea', 'custom_ng_word_validation', 10, 2); function custom_ng_word_validation($result, $tag) { $name = $tag->name; // 対象のフィールド名を確認 if ($name === 'your-message') { $value = isset($_POST[$name]) ? $_POST[$name] : ''; // NGワードのリスト(必要に応じて追加) $ng_words = ['セミナー', 'コンサル', '代行', 'アダルト']; foreach ($ng_words as $ng) { if (stripos($value, $ng) !== false) { $result->invalidate($tag, 'スパムと判断されたため、ご利用いただけません'); break; } } } return $result; }
✅ 方法2:複数のフィールドに対応する例
add_filter('wpcf7_validate_text', 'custom_ng_word_validation_all_fields', 10, 2); add_filter('wpcf7_validate_textarea', 'custom_ng_word_validation_all_fields', 10, 2); function custom_ng_word_validation_all_fields($result, $tag) { $name = $tag->name; $value = isset($_POST[$name]) ? $_POST[$name] : ''; // NGワードのリスト $ng_words = ['セミナー', 'コンサル', '代行', 'アダルト']; foreach ($ng_words as $ng) { if (stripos($value, $ng) !== false) { $result->invalidate($tag, 'スパムと判断されたため、ご利用いただけません'); break; } } return $result; }
🔍 注意点
stripos()
を使っているので、大文字小文字は区別されません。- 送信者に警告を返すメッセージは、サイトのトーンに合わせて調整してください。
wpcf7_validate_*
の*
は、対象のフィールドの型(text
,textarea
,email
, など)です。
🚀 応用例
- 特定の語句が 完全一致 でなければNGにしない場合 →
===
やin_array()
を使用 - NGワードをDBやオプションページで管理 →
get_option()
などで取得