AIブログの収益化
 
Contact Form 7にNGワードを設定して迷惑メールをシャットアウト

Contact Form 7にNGワードを設定して迷惑メールをシャットアウト

問い合わせフォームを通じて、迷惑メール(スパム)が大量に届くようになり、困っていませんか?

具体的には、以下のような内容のスパムが頻繁に送られてきています:

  • 営業メール、投資勧誘、出会い系、アダルト系
  • 英語や意味不明な文章の羅列
  • 不審なリンクを含む宣伝目的のメッセージ
  • 同じ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() などで取得

WP