Contact Form 7 — gratuit, performant, extensible…

Contact Form 7 est l'une des plus basiques, des plus anciennes, des plus utilisées des extensions pour les formulaires dans WordPress. Mais aussi une des plus puissantes.

Cet article prend 10 minutes à lire et comporte 2261 mots.

Par défaut, WordPress ne gère pas les for­mu­laires, si ce n’est pour les com­men­taires. Mais ras­su­rez-vous, vous trou­ve­rez dans le dépôt WordPress des dizaines d’ex­ten­sions pour pal­lier ce manque. Dont WPForms, Ninja Forms et… Contact Form 7. C’est d’ailleurs le plus popu­laire, au vu de ses plus de 10 mil­lions d’ins­tal­la­tions actives.

Et pour­tant, contrai­re­ment à cer­tains de ses concur­rents, il n’offre pas de construc­teur dédié, et dans sa ver­sion de base, il est on ne peut plus rus­tique. Alors pour­quoi cet engouement ?

Plusieurs rai­sons per­mettent d’ex­pli­quer le suc­cès de cette extension : 

  • Tout d’a­bord, sa sim­pli­ci­té. Ce côté rus­tique avec une inter­face spar­tiate ras­sure. Mais ne vous mépre­nez pas ! Rustique, simple, mais puissant.
  • Contact Form 7 est éga­le­ment flexible, grâce aux hooks WordPress. Les filtres et actions dis­po­nibles dans Contact Form 7 auto­risent une grande sou­plesse dans le trai­te­ment des for­mu­laires. Pour un déve­lop­peur, c’est le nec plus ultra, c’est l’as­su­rance de pou­voir faire ce que l’on veut comme l’on veut.
  • Enfin, vous trou­ve­rez des addons à Contact Form 7 dans le dépôt WordPress, pour redi­ri­ger après envoi, pour créer un for­mu­laire séquen­tiel, pour gérer des types de champs sup­plé­men­taires, pour struc­tu­rer via un sys­tème de grille…

Lors du déve­lop­pe­ment (récent) d’un CRM basé sur WordPress, j’ai été emme­né à user des hooks et des addons de Contact Form 7, et le moins que je puisse dire, c’est qu’au­cun de ses concur­rents ne m’au­raient per­mis de faire ne serait-ce que le dixième de ce que j’ai fait en l’u­ti­li­sant. Et ce n’est pas faute d’a­voir ten­té. Seul concur­rent sérieux, a prio­ri : Gravity Forms — mais il est payant. Ce qui dans cer­tains cas ne pose­ra pas vrai­ment pro­blème, cer­tains des addons de Contact Form 7 l’é­tant aus­si. Tout est ques­tion de besoin — et de portefeuille.

Ce que je vous pro­pose, c’est de faire un tour rapide d’ho­ri­zon de Contact Form 7, de ses hooks et de ses addons.

Nous allons pour com­men­cer par la…

Prise en main de Contact Form 7

Si vous êtes un habi­tué de WordPress, vous savez com­ment ins­tal­ler une exten­sion. Sinon, je vous pro­pose de lire mon billet Installer, acti­ver, mettre à jour et sup­pri­mer une exten­sion WordPress.

Une fois Contact Form 7 ins­tal­lé et acti­vé, vous pou­vez l’u­ti­li­ser, il n’y a pas de réglages par­ti­cu­liers. Tout se gère for­mu­laire par for­mu­laire : les champs du for­mu­laire, le conte­nu du mes­sage envoyé, les textes des mes­sages de noti­fi­ca­tion, et les réglages addi­tion­nels (nous revien­drons plus tard dessus).

Création d’un formulaire

Rien de plus simple, cli­quez sur ajou­ter et vous aurez un for­mu­laire basique, de type for­mu­laire de contact. L’interface mini­ma­liste du pre­mier onglet contient le code HTML ain­si que les short­codes pour l’in­ser­tion des champs et boutons :

<label> Votre nom
    [text* your-name autocomplete:name] </label>

<label> Votre e-mail
    [email* your-email autocomplete:email] </label>

<label> Objet
    [text* your-subject] </label>

<label> Votre message (facultatif)
    [textarea your-message] </label>

[submit "Envoyer"]

Dans l’exemple ci-des­sus, nous trou­vons des short­codes cor­res­pon­dant aux champs HTML5 input de type email, text, à la zone de texte (textarea) et au bou­ton de sou­mis­sion. Vous avez éga­le­ment le champ caché, la liste dérou­lante, la case à cocher, le bou­ton radio, les champs de type télé­phone, date, url, nombre, confir­ma­tion (pour accep­ter les condi­tions géné­rales par exemple) pour ne citer que l’essentiel.

C’est basique, brut de décof­frage, le bali­sage n’est pas un modèle du genre, mais tout y est et le for­mu­laire est prêt à être insé­ré dans une page ou un article.

Arrêtons nous sur la construc­tion des tags : [text* your-name autocomplete:name] avec la struc­ture [type de champ (l'étoile indique que le champ est obligatoire) - nom du champ - critères complémentaires].

Les cri­tères com­plé­men­taires cor­res­pondent pour cer­tains aux attri­buts de la balise HTML input : class:myclass don­ne­ra class="myclass", id:myid don­ne­ra id="myid".

Vous trou­ve­rez le détail de la struc­ture des champs sur le site de Contact Form 7 à la page How tags works.

En apar­té, la docu­men­ta­tion (en anglais) est plu­tôt com­plète mais ne couvre que l’u­ti­li­sa­tion « clas­sique » de l’ex­ten­sion. C’est sur le web qu’il fau­dra cher­cher tuto­riels et how­tos, en par­ti­cu­lier pour les hooks et évé­ne­ments per­son­na­li­sés. L’inconvénient, c’est que si l’on ne sait pas exac­te­ment ce que l’on cherche, ou si notre recherche porte sur une option peu uti­li­sée, on peut y perdre un cer­tain temps, pour ne pas dire un temps certain.

Les réglages de base

Le second onglet per­met de gérer l’en­voi d’un email à un des­ti­na­taire pré­dé­fi­ni. Tout est pré­vu pour un cour­riel bien for­mat­té : des­ti­na­taire, expé­di­teur, objet, en-têtes addi­tion­nels pour répondre à l’ex­pé­di­teur réel du mes­sage, envoi au for­mat texte (par défaut) ou HTML, pos­si­bi­li­té de joindre des fichiers, envoi d’une réponse automatique…

Réglages de l’email dans Contact Form 7

Les messages (notifications)

Le troi­sième onglet, Messages, per­met de per­son­na­li­ser chaque noti­fi­ca­tion. Quand le mes­sage de l’expéditeur a bien été envoyé, par exemple, le texte par défaut est Merci pour votre mes­sage. Il a été envoyé. Mais vous pou­vez le rem­pla­cer par le texte de votre choix, comme Merci pour ce mes­sage, je vous répon­drai dès que pos­sible par exemple.

Des noti­fi­ca­tions sont pré­vues pour vous infor­mer des évé­ne­ments impac­tants dans la sai­sie du for­mu­laire : l’en­voi du mes­sage (ou l’é­chec de l’o­pé­ra­tion), une sai­sie mal for­mat­tée ou man­quante, l’o­bli­ga­tion d’ac­cep­ter les condi­tions avant sou­mis­sion… c’est au total 22 mes­sages que vous pou­vez per­son­na­li­ser pour chaque for­mu­laire créé.

Les réglages additionnels

Le qua­trième onglet , Réglages addi­tion­nels, per­met de modi­fier le com­por­te­ment par défaut de Contact Form 7 : demo_mode: on pour mettre le for­mu­laire en mode démo (le cour­riel ne sera pas envoyé, mais vous aurez la noti­fi­ca­tion de suc­cès), skip_mail: on pour pas­ser l’en­voi du courriel.

Voilà pour les basiques. C’est déjà bien, vous pou­vez main­te­nant insé­rer votre for­mu­laire via le bloc Gutenberg dédié :

Bloc Gutenberg pour Contact Form 7
Bloc Gutenberg pour Contact Form 7

En ❶, vous avez l’i­cone du bloc tel qu’il appa­rait dans la liste des blocs Gutenberg. En ❷, la liste de choix du for­mu­laire à afficher.

Voici ce que vous obtiendrez :

Formulaire Contact Form 7 - sur écran d'ordinateur
Formulaire Contact Form 7 — sur écran d’ordinateur

À noter que par défaut, le bali­sage étant en HTML5, les for­mu­laires sont responsives.

Les hooks (filtres et actions)

Nous avons vu le fonc­tion­ne­ment en uti­li­sant l’in­ter­face de base de l’ex­ten­sion, mais on peut éga­le­ment uti­li­ser les hooks pour aller plus loin avec Contact Form 7. L’un des plus uti­li­sés est wpcf7_before_send_mail que l’on appel­le­ra via add_filter ( 'wpcf7_before_send_mail', 'myfunctions_formsActions', 10, 3 ); par exemple. Et dans la fonc­tion PHP myfunctions_formsActions vous met­trez le code pour trai­ter les don­nées reçues avant de repar­tir dans la boucle des actions par défaut. Ce hook porte bien son nom, il per­met de réa­li­ser un trai­te­ment entre la sou­mis­sion du for­mu­laire et son envoi.

Tenez, un cas d’u­ti­li­sa­tion : j’ai créé un for­mu­laire pour modi­fier rapi­de­ment cer­taines valeurs dans une base de don­nées externe en plus de la base WordPress du site. Le for­mu­laire est envoyé (mais grâce à skip_mail: on il n’y a pas d’en­voi de cour­riel), les valeurs en base de don­nées sont modi­fiées en uti­li­sant la classe wpdb pour la base WordPress et par l’en­voi de don­nées via cURL dans myfunctions_formsActions() et le trai­te­ment adé­quat sur le site dis­tant, avant l’en­voi d’une noti­fi­ca­tion de réus­site ou d’é­chec. Simple et efficace.

Le hook wpcf7_add_form_tag vous per­met de créer votre propre champ de for­mu­laire, si par exemple vous sou­hai­tez for­mat­ter dif­fé­rem­ment un input en lui rajou­tant des options non incluses dans l’in­ter­face par défaut par exemple. Comme un champ date et heure ren­sei­gné auto­ma­ti­que­ment et basé sur une valeur pré­dé­fi­nie (H+24 par exemple).

Les événements DOM personnalisés

Pour aller plus loin, il est aus­si pos­sible de se ser­vir des évé­ne­ments DOM per­son­na­li­sés. Nous n’u­ti­li­sons plus PHP mais javascript :

<script>
document.addEventListener( 'wpcf7mailsent', function( event ) {
    // le traitement à appliquer, une redirection par exemple
    // vous pouvez par exemple utiliser les données du formulaire via event.detail.inputs
    var inputs = event.detail.inputs;
    for ( var i = 0; i < inputs.length; i++ ) {
        if ( 'your-name' == inputs[i].name ) {
            var yourname = inputs[i].value;
        }
    location = 'https://url-de-redirection.com/?nom=' + yourname;
    }
}, false );
</script>

Ce code peut être mis en ser­vice via l’ex­ten­sion WPCode – Insert Headers and Footers + extraits de code per­son­na­li­sés – Gestionnaire de code WordPress.

Insertion d'un bout de code - javascript
Insertion d’un bout de code — javascript

Suivez les étapes de l’i­mage : ❶ acti­vez le bout de code, ❷ don­nez-lui un nom, ❸ sélec­tion­nez le type de code, ❹ insé­rez votre code, et retour en ❶ pour enregistrer.

Le script peut aus­si être insé­ré via du code PHP, en voi­ci un exemple plus complet :

add_action('wp_footer', 'mysite_cf7_redirect');

function mysite_cf7_redirect() {
    if (function_exists('wpcf7')) {
        echo "<script type='text/javascript'>
        document.addEventListener('wpcf7mailsent', function(event) {
            location = 'https://your-redirection-url.com'; // remplacer avec votre URL de destination
        }, false);
        </script>";
    }
}

Attention ! À l’é­tape ❸ ne choi­sis­sez pas javas­cript mais PHP !

Pour en savoir plus les évé­ne­ments DOM per­son­na­li­sés, je vous conseille de consul­ter la page DOM Events sur le site de l’ex­ten­sion. Vous y trou­ve­rez les dif­fé­rents évé­ne­ments appe­lables, et le conte­nu de l’ob­jet event asso­cié à l’événement.

Après ce bref tour d’ho­ri­zon de Contact Form 7, vous com­men­cez peut-être à entre­voir tout le poten­tiel de cette exten­sion. Bien sûr, com­pa­ré à d’autres exten­sions de for­mu­laires, on reste dans le basique. Mais c’est sans comp­ter sur les addons gra­tuits et payants déve­lop­pés pour étendre ses fonctionnalités.

Les addons pour Contact Form 7

Ce n’est pas un addon pour Contact Form 7, mais il vous per­met­tra d’in­sé­rer vos bouts de code sans modi­fier le fichier functions.php (très mau­vaise pra­tique par ailleurs), c’est WPCode – Insert Headers and Footers + extraits de code per­son­na­li­sés – Gestionnaire de code WordPress, dont nous avons par­lé pré­cé­dem­ment. Vous pour­rez insé­rer vos bouts de code PHP, javas­cript, CSS ou HTML, par­tout sur le site, sur cer­taines pages, dans la par­tie admin uni­que­ment, sur ordi­na­teur ou mobile (ou sur les deux)… il vous ser­vi­ra donc pour Contact Form 7, mais pas que.

Les constructeurs de formulaire pour Contact Form 7

Le construc­teur de for­mu­laire par défaut n’est pas le nec plus ultra des construc­teurs, il faut le recon­naitre. Le pre­mier vrai addon dans ma liste, c’est donc CF7 Smart Grid Design Extension.

Cette exten­sion per­met de créer une grille pour chaque for­mu­laire, et le résul­tat est habi­tuel­le­ment inté­res­sant. C’est le plus simple et le plus agréable à uti­li­ser. Mais à l’oc­ca­sion, je ren­contre des bugs sans rai­son appa­rente. Sur un site, elle ne se charge pas en front-end, ce qui donne un ren­du basique pour le for­mu­laire. Sur un autre site, elle inter­fère avec d’autres addons. Vous pou­vez ten­ter, mais per­son­nel­le­ment, je suis déçu par cette exten­sion pour­tant si prometteuse.

Je pré­fère désor­mais créer mes for­mu­laires via le construc­teur en ligne de Crocoblock. Voici une courte vidéo qui vous en expli­que­ra le fonctionnement :

Une fois la grille construite, il vous suf­fit de copier le HTML et le CSS pour obte­nir un cane­vas où il ne reste plus qu’à inté­grer le conte­nu spé­ci­fique à Contact Form 7, pour pas­ser de 

<div class="cf-container">
	<div class="cf-col-6">CF7 field. Row: 1. Column: 1</div>
	<div class="cf-col-6">CF7 field. Row: 1. Column: 2</div>
</div>

à

<div class="cf-container">
	<div class="cf-col-6">[text your-name placeholder "Votre nom"]</div>
	<div class="cf-col-6">[email your-email placeholder "Votre courriel"]</div>
</div>

et vous obtien­drez ce résultat :

Rendu du formulaire avec le constructeur Crocoblock
Rendu du for­mu­laire avec le construc­teur Crocoblock

Le couteau suisse pour Contact Form 7

Contact Form 7 est per­for­mant mais basique, c’est un fait. Si vous avez besoin d’un for­mu­laire un mini­mum éla­bo­ré, avec un cane­vas, avec une logique condi­tion­nelle, la signa­ture de votre client, des champs pré­rem­plis, l’in­té­gra­tion avec WooCommerce, Telegram, Zapier, Mailchimp… alors il vous faut Ultimate Addons for Contact Form 7.

Cette exten­sion per­met d’é­tendre les capa­ci­tés de Contact Form 7, et de mettre en forme plus fine­ment son for­mu­laire, sans pour autant avoir la sou­plesse du construc­teur de Crocoblock, tout au moins dans sa ver­sion gra­tuite. C’est un tout en un, il y a donc des fonc­tion­na­li­tés plus basiques que d’autres.

J’ai uti­li­sé le module de grille pour des for­mu­laires mul­ti­co­lonnes, le champ signa­ture dans un for­mu­laire de compte ren­du d’in­ter­ven­tion chez le client, la redi­rec­tion après sou­mis­sion du for­mu­laire, les champs condi­tion­nels en fonc­tion du public visé (le numé­ro SIREN n’a pas d’in­té­rêt pour un par­ti­cu­lier mais est obli­ga­toire pour un pro­fes­sion­nel)… mais il y a en plus la pos­si­bi­li­té de créer des for­mu­laires avec étapes (mul­tis­tep), d’in­sé­rer des champs selon une logique condi­tion­nelle, de sau­ve­gar­der les entrées du for­mu­laire en base de don­née, et j’en passe, il y a une ving­taine de modules livrés avec la ver­sion gratuite.

La ver­sion Pro est encore plus com­plète, elle per­met de créer des grilles per­son­na­li­sées avec une varié­té de com­bi­nai­sons plus impor­tante, la pos­si­bi­li­té de créer des for­mu­laires inter­ac­tifs, d’a­voir des champs répé­tables, une redi­rec­tion condi­tion­nelle, de créer des listes ou des grilles de pro­duits WooCommerce…

Une licence à vie (life­time) vaut de 99 à 199€ en fonc­tion des pro­mo­tions en cours sur le site, ce qui est rai­son­nable au vu des fonc­tion­na­li­tés pro­po­sées, d’au­tant que le sup­port est très réac­tif : à chaque ques­tion posée, j’ai eu une réponse dans la jour­née.

Le filtre antispam

Même si l’ap­pa­rence est essen­tielle, la sécu­ri­té lui dame le pion — de mon point de vue tout au moins. C’est pour cela que j’ai ins­tal­lé et acti­vé Contact Form 7 Honeypot.

Pas de confi­gu­ra­tion par­ti­cu­lière pour cette exten­sion qui vous pro­tège effi­ca­ce­ment du spam. Ceci dit, si vous uti­li­sez une autre exten­sion pour évi­ter le spam et les com­men­taires indé­si­rables, elle couvre peut être aus­si les for­mu­laires créés via Contact Form 7. L’avantage de celle-ci, c’est qu’elle est trans­pa­rente pour l’u­ti­li­sa­teur. Pas de CAPTCHA, pas de quiz, aucune action de l’u­ti­li­sa­teur n’est requise.

Les autres addons

En fonc­tion de vos besoins : télé­ver­se­ment de plu­sieurs images, ins­crip­tion à une liste de dif­fu­sion, champs cal­cu­lés pour éta­blir un devis, paie­ment via Paypal ou Stripe, connexion à Google Sheets, tem­plate desi­gner pour envoyer des cour­riels plus accro­cheurs, envoi de SMS, vous trou­ve­rez l’ex­ten­sion qu’il vous faut dans le dépôt WordPress ou en cher­chant sur le web — toutes les exten­sions ne sont pas gra­tuites, et cer­taines n’ont pas de ver­sion gra­tuite bridée.

Le mot de la fin

Contact Form 7 ne va pas vous éblouir par son inter­face user friend­ly, par les types de champs gérés ou par ses options déli­rantes, mais il per­met de créer un for­mu­laire qui répond à vos besoins, via des addons dans cer­tains cas, ou en met­tant les mains dans le cam­bouis à l’oc­ca­sion, mais pour des pos­si­bi­li­tés qui vont au-delà du simple for­mu­laire de contact, et au-delà de ce que vous pro­posent la plu­part de ses concur­rents, le tout gra­tui­te­ment ou pour un coût dérisoire.

Retour en haut
We use cookies in order to give you the best possible experience on our website. By continuing to use this site, you agree to our use of cookies.
Accept