Annonce

#1 2016-07-06 17:12:03

Agasthène
Membre
Inscription : 2016-07-03
Messages : 3

Formulaire d'inscription dans un site Wordpress avec CURL

Bonjour à tous,

tout d'abord, merci à Bobe pour ce script, qui fonctionne très bien (version 3.0.0 installée) !

N'ayant pas réussi à faire fonctionner les "include" ou les "require" chez mon hébergeur (OVH en mutualisé), j'ai contourné le problème.
J'ai intégré le formulaire de Wanewsletter dans un template de page Wordpress (exemple ici : http://www.domaine.com/newsletter/), et j'ai utilisé la librairie CURL pour "communiquer" avec Wanewsletter.

Dans les paramétrages de la liste, l'"URL absolue de la page où se trouve le formulaire" est également "http://www.domaine.com/newsletter/".

Cela fonctionne, donc je partage.

Les inscriptions, désinscriptions et confirmations après réception d'un e-mail de confirmation se font depuis cette page du blog, qui relaye les informations saisies vers la page "newsletter.php" de Wanewsletter, hébergé avec un sous-domaine (news.domaine.com) différent de celui du blog (www.domaine.com). Les réponses de Wanewsletter sont affichées sur la même page du blog.

N'étant pas développeur PHP, il se peut que le code ne soit pas très propre, n'hésitez pas à me corriger... Je n'ai pas intégré de gestion des erreurs éventuelles.

Après avoir généré le code du formulaire pour l'inscription à ma newsletter, je l'ai intégré dans un template Wordpress, que j'affecte à ma page.

Le code inséré dans le template de page Wordpress
(qui reprend une partie du code de la page newsletter.php de Wanewsletter, pour le traitement des paramètres passés à Wanewsletter)

Traitement du formulaire et envoi des informations via CURL (en entête du template) :

<?php
$wa_action = $_POST['action'];
$wa_email = $_POST['email'];
$wa_format = $_POST['format'];
$wa_liste = $_POST['liste'];
$wa_action = $_POST['action'];
$wa_wanewsletter = $_POST['wanewsletter'];
$wa_code = '';

if (preg_match('/([a-z0-9]{20})(?:&|$)/i', $_SERVER['QUERY_STRING'], $m)) {
	$wa_code = $m[1];
}

if ($wa_action) {
	$wa_url = 'http://news.domaine.com/newsletter.php';
	$wa_vars = 'email='.$wa_email.'&format='.$wa_format.'&liste='.$wa_liste.'&action='.$wa_action.'&wanewsletter='.$wa_wanewsletter;
	$wa_ch = curl_init($wa_url);
	curl_setopt($wa_ch, CURLOPT_HEADER, 0);
	curl_setopt($wa_ch, CURLOPT_POST, 1);
	curl_setopt($wa_ch, CURLOPT_POSTFIELDS, $wa_vars);
	curl_setopt($wa_ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($wa_ch, CURLOPT_RETURNTRANSFER, 1);
	$wa_response = curl_exec($wa_ch);
	curl_close($wa_ch);
} else if ($wa_code) {
	$wa_url = 'http://news.domaine.com/newsletter.php?'.$wa_code;
	$wa_ch = curl_init($wa_url);
	curl_setopt($wa_ch, CURLOPT_HEADER, 0);
	curl_setopt($wa_ch, CURLOPT_RETURNTRANSFER, 1);
	$wa_response = curl_exec($wa_ch);
	curl_close($wa_ch);	
}
?>

Affichage des réponses de Wanewsletter :

<?php
if ($wa_response) {
echo '<div>'.$wa_response.'</div>';
}
?>

Le code du formulaire généré (inchangé) :

<form method="post" action="http://www.domaine.com/newsletter/">
Adresse email : <input type="text" name="email" maxlength="100" /> &nbsp; 
<input type="hidden" name="format" value="2" />
<input type="hidden" name="liste" value="1" />
<br />
<input type="radio" name="action" value="inscription" checked="checked" /> Inscription <br />
<input type="radio" name="action" value="desinscription" /> Désinscription <br />
<input type="submit" name="wanewsletter" value="Valider" />
</form>

Si ça peut servir à quelqu'un...

Bonne journée.

Agasthène

Dernière modification par Agasthène (2016-07-06 19:08:39)

Hors ligne

Pied de page des forums