Les formulaires sont l’un des sujets les moins documentés d’un projet headless WordPress, alors qu’ils concernent presque tous les sites : formulaire de contact, demande de devis, inscription à une newsletter. Contrairement aux articles ou aux pages, la gestion des formulaires n’est pas homogène selon le plugin utilisé, et demande une décision technique claire dès le début du projet.
Cet article compare deux approches concrètes : s’appuyer sur l’API REST fournie par un plugin comme Gravity Forms, ou construire un endpoint personnalisé pour un contrôle total sur la logique d’envoi, avec le cas particulier de Contact Form 7, dépourvu d’API REST native.
Approche 1 : l’API REST de Gravity Forms
Gravity Forms, plugin de formulaires payant très répandu, propose un add-on officiel exposant une API REST dédiée sous l’espace de noms gf/v2. Un formulaire créé dans l’administration WordPress devient interrogeable et soumissible directement depuis un frontend headless, sans avoir à recréer la logique de validation ni la structure du formulaire côté frontend.
// Récupérer la structure d'un formulaire
fetch( 'https://exemple.fr/wp-json/gf/v2/forms/3', {
headers: { Authorization: `Basic ${ identifiantsBase64 }` },
} )
.then( ( r ) => r.json() )
.then( ( formulaire ) => console.log( formulaire.fields ) );
// Soumettre le formulaire
fetch( 'https://exemple.fr/wp-json/gf/v2/forms/3/submissions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Basic ${ identifiantsBase64 }`,
},
body: JSON.stringify( {
input_1: 'Clément Hadrot',
input_2: 'clement@exemple.fr',
input_3: 'Bonjour, je souhaite un devis.',
} ),
} );
L’avantage principal : les équipes marketing ou éditoriales gardent la main sur la structure du formulaire depuis l’interface WordPress habituelle, sans intervention du développeur à chaque modification de champ. La validation, les notifications par email et l’enregistrement des soumissions restent gérés nativement par le plugin.
Approche 2 : un endpoint sur mesure
Pour un formulaire simple, ou quand aucun plugin ne propose d’API REST adaptée, construire un endpoint personnalisé avec register_rest_route() reste une option tout à fait raisonnable. Elle offre un contrôle total sur la validation, le traitement et l’envoi, au prix d’un développement plus long :
add_action( 'rest_api_init', function () {
register_rest_route( 'wpmoderne/v1', '/contact', array(
'methods' => WP_REST_Server::CREATABLE,
'callback' => 'wpmoderne_traiter_contact',
'permission_callback' => '__return_true',
'args' => array(
'email' => array(
'required' => true,
'validate_callback' => function( $valeur ) {
return is_email( $valeur );
},
'sanitize_callback' => 'sanitize_email',
),
'message' => array(
'required' => true,
'sanitize_callback' => 'sanitize_textarea_field',
),
),
) );
} );
function wpmoderne_traiter_contact( WP_REST_Request $request ) {
$envoi_reussi = wp_mail(
get_option( 'admin_email' ),
'Nouveau message de contact',
$request->get_param( 'message' ),
array( 'Reply-To: ' . $request->get_param( 'email' ) )
);
if ( ! $envoi_reussi ) {
return new WP_Error( 'echec_envoi', 'L\'envoi a échoué.', array( 'status' => 500 ) );
}
return new WP_REST_Response( array( 'succes' => true ), 200 );
}
Cette approche exige de penser soi-même à la protection contre le spam, souvent absente d’un endpoint fait maison : une vérification anti-robot (reCAPTCHA, honeypot) et une limitation du nombre de requêtes par adresse IP restent indispensables pour éviter les abus.

Le cas particulier de Contact Form 7
Contact Form 7, plugin gratuit très répandu, ne propose aucune API REST native pour la soumission de formulaires. Deux options s’offrent alors : installer un plugin complémentaire tiers qui ajoute cette capacité, ou reproduire entièrement la logique de traitement avec un endpoint personnalisé comme celui présenté ci-dessus, en abandonnant l’usage de Contact Form 7 pour la partie headless tout en conservant éventuellement le plugin pour d’autres usages sur le site.
Comparer les deux approches
- Rapidité de mise en place : l’API de Gravity Forms l’emporte largement, aucune logique métier à recoder
- Autonomie éditoriale : Gravity Forms permet aux équipes non techniques de modifier un formulaire sans intervention développeur
- Contrôle total : un endpoint sur mesure permet d’adapter précisément la logique de validation, de stockage ou d’intégration à un CRM tiers
- Coût : Gravity Forms est un plugin payant, un critère à intégrer dans le choix selon le budget du projet
Sur un projet avec des besoins de formulaires simples et peu évolutifs, un endpoint personnalisé reste tout à fait viable. Dès que plusieurs formulaires doivent être modifiés régulièrement par une équipe non technique, l’investissement dans une solution avec API REST intégrée se rentabilise rapidement.
En résumé
La gestion des formulaires en headless WordPress n’a pas de solution universelle : l’API REST de Gravity Forms convient parfaitement à des besoins évolutifs gérés par des équipes non techniques, tandis qu’un endpoint personnalisé reste pertinent pour un formulaire simple ou une logique métier spécifique. Contact Form 7, dépourvu d’API REST native, impose de choisir entre un plugin complémentaire ou une solution entièrement recodée côté headless.