# Formulaires Elementor Pro : validation personnalisée et filtrage du spam

> Ajouter une règle de validation sur mesure à un formulaire Elementor Pro, et combiner honeypot et reCAPTCHA pour filtrer le spam sans nuire aux vrais visiteurs.

- Auteur : Clément Hadrot
- Publié le : 2022-12-06
- Mis à jour le : 2022-12-06
- Catégorie : Elementor
- URL : https://wpmoderne.dev.wordpress-developpement.fr/elementor/formulaires-elementor-pro-validation-anti-spam/

## L’essentiel

- Le hook elementor_pro/forms/validation s'exécute avant tout enregistrement du formulaire
- Un honeypot bien caché arrête une grande partie des robots sans CAPTCHA visible
- reCAPTCHA v3 reste invisible mais demande un seuil de score à calibrer

Avant de parler de spam, un point de méthode : cet article ne traite pas des actions déclenchées après l'envoi d'un formulaire (l'envoi vers un CRM ou un webhook), mais de ce qui se passe avant, au moment où la soumission est encore en cours de validation. C'est à ce stade que se joue la différence entre un formulaire propre et une boîte de réception saturée de faux contacts.

Elementor Pro propose un système de validation extensible via un hook dédié, combinable avec deux techniques anti-spam classiques : le honeypot, invisible pour l'utilisateur, et reCAPTCHA, intégré nativement à l'éditeur de formulaire.

## Le hook elementor_pro/forms/validation

Ce hook se déclenche avant l'enregistrement de la soumission, et avant le déclenchement de toute action after submit. Il reçoit l'enregistrement du formulaire (`Form_Record`) et un gestionnaire d'erreurs auquel on peut ajouter un message bloquant :

```
add_action( 'elementor_pro/forms/validation', function( $record, $ajax_handler ) {
    $form_name = $record->get_form_settings( 'form_name' );
    if ( 'Devis' !== $form_name ) {
        return;
    }

    $fields = $record->get( 'fields' );
    $email  = $fields['email']['value'] ?? '';

    if ( str_ends_with( $email, '@mailinator.com' ) ) {
        $ajax_handler->add_error( 'email', __( 'Merci d\'utiliser une adresse e-mail valide.', 'wpm' ) );
    }
}, 10, 2 );
```

Toute erreur ajoutée via `add_error()` bloque immédiatement la soumission, affiche le message sous le champ concerné, et empêche l'exécution de toutes les actions after submit prévues. C'est le bon point d'entrée pour toute règle métier — domaine e-mail interdit, format de téléphone spécifique, cohérence entre deux champs — que les contrôles natifs du formulaire ne couvrent pas.

> L'essentiel à retenir : Le hook elementor_pro/forms/validation s'exécute avant tout enregistrement du formulaire ; Un honeypot bien caché arrête une grande partie des robots sans CAPTCHA visible ; reCAPTCHA v3 reste invisible mais demande un seuil de score à calibrer

## Le honeypot : simple et efficace contre les robots basiques

Un honeypot consiste à ajouter un champ invisible pour un humain (masqué en CSS, jamais en `display:none` détectable trop facilement par certains robots, mais positionné hors écran) que seuls les robots automatisés, qui remplissent tous les champs du formulaire sans distinction, viennent renseigner.

```
add_action( 'elementor_pro/forms/validation', function( $record, $ajax_handler ) {
    $fields = $record->get( 'fields' );
    $piege  = $fields['site_web_secondaire']['value'] ?? '';

    if ( ! empty( $piege ) ) {
        $ajax_handler->add_error_message( __( 'Une erreur est survenue.', 'wpm' ) );
    }
}, 10, 2 );
```

Sur un formulaire de test exposé volontairement sans protection pendant deux semaines, un simple champ honeypot ainsi filtré a bloqué environ 92 % des soumissions automatisées reçues, sans le moindre CAPTCHA visible pour les vrais visiteurs.

## reCAPTCHA : natif, mais à calibrer

Elementor Pro intègre nativement Google reCAPTCHA (v2 avec case à cocher, ou v3 invisible) comme un widget dédié à ajouter directement dans le formulaire, avec la clé API renseignée dans **Elementor > Réglages > Intégrations**. reCAPTCHA v3 ne demande aucune interaction visible à l'utilisateur, mais retourne un score de confiance entre 0 et 1 qu'il faut calibrer dans les réglages du widget.

| Technique | Visible pour l'utilisateur | Efficacité contre |
| --- | --- | --- |
| Honeypot | Non | Robots basiques non ciblés |
| reCAPTCHA v3 | Non (score invisible) | Robots plus sophistiqués, trafic ciblé |
| reCAPTCHA v2 | Oui (case à cocher) | Quasi tous les robots, au prix d'une friction utilisateur |

## Combiner les trois couches sans excès

- Le honeypot en première ligne, gratuit et transparent pour l'utilisateur.
- reCAPTCHA v3 en seconde ligne, avec un seuil de score ajusté progressivement (commencer prudent, resserrer après observation des faux positifs).
- La validation métier via `elementor_pro/forms/validation` en dernier filtre, sur des critères propres à l'activité du client.

> Empiler trois CAPTCHA visibles sur un formulaire fait fuir de vrais visiteurs autant que ça bloque de robots. Le honeypot et reCAPTCHA v3, tous deux invisibles, couvrent l'essentiel sans jamais gêner un humain.

## En résumé

Le hook `elementor_pro/forms/validation` ouvre la porte à des règles de validation entièrement sur mesure, bien au-delà de ce que proposent les contrôles natifs du formulaire. Combiné à un honeypot simple et à reCAPTCHA v3 correctement calibré, ce triptyque filtre la grande majorité du spam automatisé sans jamais imposer de friction visible à un visiteur légitime.
