Comment connecter un formulaire d’inscription à un webinaire, intégré dans un template de page du thème, à un outil d’emailing sans passer par un widget iframe qui casserait la charte graphique de la page ? Cette question s’est posée pour une entreprise qui organisait des webinaires mensuels et voulait un formulaire d’inscription entièrement natif à son site, tout en ajoutant automatiquement chaque inscrit à une liste de diffusion Sendinblue dédiée aux futurs webinaires.
Le template de page dédié
Un template page-webinaire.php affiche le contenu de présentation du webinaire (rédigé depuis l’éditeur de la page) puis un formulaire minimal, sans dépendance à un script embarqué externe :
<?php
/* Template Name: Inscription webinaire */
get_header();
the_content();
?>
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
<input type="hidden" name="action" value="inscription_webinaire">
<?php wp_nonce_field( 'inscription_webinaire', 'webinaire_nonce' ); ?>
<label for="prenom">Prénom</label>
<input type="text" id="prenom" name="prenom" required>
<label for="email_webinaire">Adresse e-mail</label>
<input type="email" id="email_webinaire" name="email" required>
<button type="submit">S'inscrire au webinaire</button>
</form>
<?php get_footer(); ?>
Appeler l’API contacts de Sendinblue
Le traitement de la soumission, accroché sur admin_post, appelle l’endpoint contacts de l’API Sendinblue via wp_remote_post(), avec la clé API stockée en variable d’environnement :

add_action( 'admin_post_inscription_webinaire', function() {
check_admin_referer( 'inscription_webinaire', 'webinaire_nonce' );
$prenom = sanitize_text_field( $_POST['prenom'] ?? '' );
$email = sanitize_email( $_POST['email'] ?? '' );
if ( ! is_email( $email ) || empty( $prenom ) ) {
wp_redirect( add_query_arg( 'webinaire', 'erreur', wp_get_referer() ) );
exit;
}
$reponse = wp_remote_post(
'https://api.sendinblue.com/v3/contacts',
array(
'headers' => array(
'api-key' => getenv( 'SENDINBLUE_API_KEY' ),
'Content-Type' => 'application/json',
),
'body' => wp_json_encode( array(
'email' => $email,
'attributes' => array( 'PRENOM' => $prenom ),
'listIds' => array( (int) getenv( 'SENDINBLUE_LISTE_WEBINAIRE' ) ),
) ),
)
);
$code = is_wp_error( $reponse ) ? 0 : wp_remote_retrieve_response_code( $reponse );
$statut = in_array( $code, array( 200, 201 ), true ) ? 'merci' : 'erreur';
wp_redirect( add_query_arg( 'webinaire', $statut, wp_get_referer() ) );
exit;
} );
add_action( 'admin_post_nopriv_inscription_webinaire', function() {
do_action( 'admin_post_inscription_webinaire' );
} );
Gérer le cas du contact déjà existant
Un inscrit à un webinaire précédent, déjà présent dans la base Sendinblue, provoque un code de réponse 400 avec un message d’erreur duplicate_parameter plutôt qu’un succès. Ce cas a été traité explicitement pour ne pas afficher une erreur trompeuse à un contact simplement déjà inscrit à la liste :
$corps_reponse = json_decode( wp_remote_retrieve_body( $reponse ), true );
if ( 400 === $code && isset( $corps_reponse['code'] ) && 'duplicate_parameter' === $corps_reponse['code'] ) {
$statut = 'merci';
}
Message de confirmation adapté
Le template lit le paramètre de retour pour afficher un message cohérent, sans rechargement Ajax supplémentaire :
<?php if ( 'merci' === ( $_GET['webinaire'] ?? '' ) ) : ?>
<p class="webinaire-message">Inscription confirmée. Le lien de connexion vous sera envoyé la veille du webinaire.</p>
<?php elseif ( 'erreur' === ( $_GET['webinaire'] ?? '' ) ) : ?>
<p class="webinaire-message webinaire-erreur">Une erreur est survenue, merci de vérifier votre adresse e-mail.</p>
<?php endif; ?>
Ce qui reste entièrement côté Sendinblue
Cette intégration se limite à l’inscription d’un contact sur une liste. L’envoi du lien de connexion au webinaire, la relance automatique des inscrits n’ayant pas ouvert l’e-mail de confirmation, ainsi que le suivi des taux d’ouverture, restent configurés et pilotés entièrement depuis l’interface Sendinblue, hors du périmètre du thème.
En résumé
Un formulaire natif au thème, relié directement à l’API contacts de Sendinblue, évite le widget iframe standard tout en gardant l’inscription simple : deux champs, un appel API, et une liste de diffusion tenue à jour automatiquement sans plugin de newsletter généraliste.