Comment bloquer efficacement le spam sur Contact Form 7 sans empêcher l’enregistrement en base de données

Comment bloquer efficacement le spam sur Contact Form 7 sans empêcher l’enregistrement en base de données

Le spam via les formulaires de contact est un problème courant sur WordPress. Dès qu’un site commence à avoir un peu de visibilité, les bots s’attaquent aux formulaires et remplissent automatiquement les champs pour envoyer des messages indésirables. Résultat : des dizaines d’emails inutiles, du temps perdu et parfois même une boîte mail saturée.

Si tu utilises Contact Form 7 et un plugin d’enregistrement en base de données, tu peux mettre en place une solution simple, propre et efficace : un champ honeypot invisible qui bloque l’envoi d’email pour les bots, tout en conservant l’enregistrement en base de données.

Voici comment faire.

Pourquoi éviter les captchas classiques

Beaucoup installent Google reCAPTCHA ou d’autres systèmes similaires. Le problème, c’est que :

  • Cela ajoute une friction pour les vrais utilisateurs.
  • Cela peut ralentir le site.
  • Cela nuit parfois à l’expérience mobile.
  • Ce n’est pas toujours conforme aux attentes RGPD selon la configuration.

Un honeypot est souvent plus efficace et totalement invisible pour l’utilisateur humain.

Qu’est-ce qu’un honeypot sur Contact Form 7

Le principe est simple :

Un champ invisible est ajouté au formulaire. Les humains ne le voient pas et ne le remplissent pas. Les bots, eux, remplissent tous les champs disponibles. Si ce champ contient une valeur, il y a de fortes chances que ce soit un spam.

L’idée n’est pas de bloquer la soumission. On laisse le formulaire se soumettre normalement pour que le plugin DB enregistre la donnée. En revanche, on empêche l’envoi de l’email.

Ainsi :

  • Les vrais messages arrivent par email.
  • Les spams sont enregistrés en base.
  • Aucun email inutile n’est envoyé.
  • L’utilisateur voit toujours “Le message a été envoyé”.

Étape 1 : Ajouter le champ invisible dans Contact Form 7

Dans le formulaire Contact Form 7, ajoute :

<div style="display:none;">
[text website]
</div>

Le champ s’appelle ici “website”. Les bots adorent remplir des champs nommés website, url ou phone. C’est parfait pour les piéger.

Étape 2 : Empêcher l’envoi de l’email si le champ est rempli

Ajoute ce code dans le fichier functions.php de ton thème actif ou dans un plugin personnalisé :

add_filter('wpcf7_skip_mail', function ($skip_mail, $contact_form) {    $submission = WPCF7_Submission::get_instance();
if (!$submission) return $skip_mail; $posted = $submission->get_posted_data();
$honeypot = isset($posted['website']) ? trim($posted['website']) : ''; if (!empty($honeypot)) {
return true; // Email non envoyé
} return $skip_mail;}, 10, 2);add_filter('wpcf7_posted_data', function ($posted_data) { $honeypot = isset($posted_data['website']) ? trim($posted_data['website']) : '';
$posted_data['is_spam'] = !empty($honeypot) ? '1' : '0'; return $posted_data;
});

Ce code fait deux choses :

  1. Il empêche l’envoi de l’email si le champ website est rempli.
  2. Il ajoute un champ is_spam dans les données enregistrées en base.

Résultat final

Si un humain envoie le formulaire :

  • L’email est envoyé.
  • Les données sont enregistrées en base.
  • Le message de confirmation s’affiche normalement.

Si un bot remplit le champ invisible :

  • Aucun email n’est envoyé.
  • Les données sont enregistrées en base.
  • Le message “Le message a été envoyé” s’affiche quand même.
  • L’entrée peut être filtrée via is_spam = 1.

C’est propre, discret et efficace.

Comment tester le système

Pour tester :

  1. Ouvre la page du formulaire.
  2. Clique droit puis “Inspecter”.
  3. Supprime temporairement le style display:none sur le champ.
  4. Remplis le champ website.
  5. Envoie le formulaire.

Si tout fonctionne :

  • Aucun email ne doit arriver.
  • L’entrée doit apparaître en base.
  • Le message de succès doit s’afficher.

Pourquoi cette méthode est idéale pour un site WordPress professionnel

Cette approche est particulièrement intéressante si tu gères :

  • Un site vitrine avec formulaire de contact.
  • Un site WooCommerce avec formulaire personnalisé.
  • Un SaaS WordPress avec plusieurs clients.
  • Un site à fort volume de trafic.

Elle évite de surcharger le front-end avec des scripts externes tout en gardant un excellent niveau de protection contre le spam automatisé.

Conclusion

Pour bloquer le spam sur Contact Form 7 sans perturber l’expérience utilisateur ni empêcher l’enregistrement en base de données, le honeypot reste l’une des solutions les plus simples et efficaces.

Tu ne bloques pas la soumission.
Tu ne frustres pas les visiteurs.
Tu évites les emails inutiles.
Tu gardes une trace complète en base.

Simple, rapide à mettre en place, et parfaitement adapté à un WordPress optimisé.

Si besoin, il est possible d’aller plus loin avec le logging IP, la récupération automatique de l’URL d’envoi ou un système de blocage progressif par adresse IP.