Bonsoir à tous,

J'interviens sur un petit formulaire d'un site développer en Wordpress et le but de ce formulaire est d'envoyé des données par email dont le destinataire varie selon le sujet qui a été choisi.

Je m'explique :

J'ai rédigé dans un premier temps de manière procédurale mon code qui est le suivant (j'ai déclaré mes variables juste avant la condition)

if ($subject == 0) {

    // Détails de la fonction : mail('Destinataire', 'Objet', 'Message', 'Option');

    mail('exemple@exemple.com', utf8_decode('En savoir plus sur notre activité / Know more about us'), $message, $encode);
    session_start(); // On démarre la session afin de pouvoir recupérer la variable stockée
    $_SESSION['flash']['success'] = "Votre message a bien été envoyé à notre service.";

} else if ($subject == 1) {

    mail('exemple2@exemple.com', 'Demande de devis / Quote request', $message, $encode);
     session_start();
     $_SESSION['flash']['success'] = "Votre message a bien été envoyé à notre service.";

} else if ($subject == 2) {

    mail('exemple3@exemple.com', 'Contact presse / Press contact', $message, $encode);
    session_start();
    $_SESSION['flash']['success'] = "Votre message a bien été envoyé à notre service.";

} else {

    session_start();
    $_SESSION['flash']['error'] = "Une erreur est survenue lors de l'envoi, veuillez réessayer.";

}

// redirection sur la page contact

header('Location: http://chemin_de_redirection_en_dur');
exit();

Lorsque mes valeurs sont en dur, tout fonctionne parfaitement.

Le formulaire va bien sur la page de traitement PHP puis est redirigé selon le chemin souhaité. Ainsi dans le cas d'un succes ou non le message de session apparaît.

Mais je ne souhaite pas m'arrêter là et c'est maintenant que j'ai un problème. Je veux utiliser des fonctions wordpress pour gérer la traduction ainsi que la redirection de page qui peut être modifiable directement via le back-office.

Voilà ce que j'ai essayé et que j'aimerai faire fonctionner (et qui ne fonctionne pas pour le moment) :

if ($subject == 0) {

    // Détails de la fonction : mail('Destinataire', 'Objet', 'Message', 'Option');

    mail('exemple@exemple.com', utf8_decode('En savoir plus sur notre activité / Know more about us'), $message, $encode);
    session_start(); // On démarre la session afin de pouvoir recupérer la variable stockée
    $_SESSION['flash']['success'] = _e('Your message has been sent to our service.', 'twentyeleven');

} else if ($subject == 1) {

    mail('exemple1@exemple.com', 'Demande de devis / Quote request', $message, $encode);
    session_start();
    $_SESSION['flash']['success'] = _e('Your message has been sent to our service.', 'twentyeleven');

} else if ($subject == 2) {

     mail('exemple2@exemple.com', 'Contact presse / Press contact', $message, $encode);
    session_start();
    $_SESSION['flash']['success'] = _e('Your message has been sent to our service.', 'twentyeleven');

} else {

    session_start();
    $_SESSION['flash']['error'] = _e('An error has occured, please try again', 'twentyeleven');

}

// redirection sur la page contact

wp_redirect(home_url());
exit();

Voilà pour récapituler, j'aimerai utiliser la fonction de traduction Wordpress _e() ou ___() dans mes variables de sessions ainsi qu'utiliser la fonction de redirection proposé par wordpress wp_redirect() ou wp_safe_redirect().
De plus, le script se bloque sur la page de traitement et la fonction de redirection (header) n'est plus pris en compte.

Je voulais aussi ajouté que j'utilise les fonctions de traduction dans d'autres pages et que cela fonctionne très bien.
Visiblement moins dans ma $_SESSION...
Je suis débutant en Wordpress et en développement en général et aujourd'hui je fais appel à vos connaissances pour m'aider à trouver une solution :)

Je vous remercie par avance et reste à disposition pour plus d'information.

Bonne soirée

4 réponses


Phatza
Auteur

une solution ? :)

La pas évident tu donne bcp de code et peu de contexte ce fichier est isolé de Wordpresse ou est intégré dans un template. Pour les session il faut que tu fasse un session_start()

Phatza
Auteur

Salut, merci de ta réponse :)

Je fais bien appelle a session_start() dans les deux fichiers.
Ce fichier est dans Wordpress et traite un formulaire qui se trouve dans Wordpress, j'ai trouvé une solution qui ne passe plus par l'utilisation des variables de session.
Je la partagerai ici un poil plus tard.

Pour récapituler :

J'ai un fichier page-contact.php où se trouve le formulaire.
J'ai crée un fichier au même endroit qui traitera en php ce formulaire.
J'ai crée mes conditions pour la fonction mail() car selon le sujet choisi par l'utilisateur, le destinataire sera différent.
De plus, je souhaite indiqué à l'utilisateur que son email a bien été envoyé ou non. Pour cela, j'ai utilisé des variables de sessions afin de pouvoir récupérer des variables entre les rechargement de page.
Comme indiqué sur le premier bloc de code, j'ai réalisé un script qui fonctionne en ajoutant des valeurs en dur dans les variables de session.
Le mail est bien envoyé, la redirection avec le header se fait correctement ainsi que l'apparition de message de succes ou d'erreur. (via un foreach dans le fichier où se trouve le formulaire)
Par la suite, j'ai voulu remplacé les valeurs en dur des variables de session des fonctions de traduction WP ( __() ou _e() ).

En changeant uniquement :

$_SESSION['flash']['success'] = "Votre message a bien été envoyé à notre service.";

Qui fonctionne, par ça :

$_SESSION['flash']['success'] = _e('Your message has been sent to our service.', 'twentyeleven');

l'action du formulaire amène bien sur mon fichier de traitement php, le mail s'envoit correctement, mais le script bloque au niveau du message de session et ne prend plus en compte la suite, c'est à dire que dans l'url je reste bloqué sur ma page de traitement.

Je rajoute que mon fichier de traitement php est bien placé et qu'il devrait faire automatiquement appel au fichier functions.php de WP.

J'espère que c'est un peu plus clair, sinon je suis toujours à dispo pour des infos supp.

Merci à toi

Phatza
Auteur
<?php

          // Déclaration des variables récupérer du formulaire

          $contact_name = htmlspecialchars(trim($_POST['contact_name']));
          $contact_company = htmlspecialchars(trim($_POST['contact_company']));
          $contact_job = htmlspecialchars(trim($_POST['contact_job']));
          $contact_phone = htmlspecialchars(trim($_POST['contact_phone']));
          $contact_email = htmlspecialchars(trim($_POST['contact_email']));
          $contact_message = htmlspecialchars(trim($_POST['contact_message']));

          // Déclaration des variables d'envoi d'email

          $subject = $_POST['contact_objet'];

          $message = 'Nom : '.$contact_name.'<br>'. // Mise en forme message
                 'Entreprise : '.$contact_company.'<br>'. // Mise en forme message
                 'Poste / fonction : '.$contact_job.'<br>'. // Mise en forme message
                 'Téléphone : '.$contact_phone.'<br>'. // Mise en forme message
                 'Adresse email : '.$contact_email.'<br><br>'. // Mise en forme message
                 'Message : <br><br>'.$contact_message; // Mise en forme message

          $encode = 'Content-type: text/html; charset=utf8'; // Encodage UTF-8, pour les accents et autres

          if (!empty($_POST)) { // Si le formulaire n'est pas vide, le script s'execute.

            // Utilisation fonction mail() sous conditions :

            if ($subject == 0) {

              // Détails de la fonction : mail('Destinataire', 'Objet', 'Message', 'Option');

              $mail =mail('test@test.com', utf8_decode('En savoir plus sur notre activité / Know more about us'), $message, $encode);
              echo "<p class='success'>".__( 'Your message has been sent to our service.', 'twentyeleven' )."</p>"; // Message d'alerte success

            } else if ($subject == 1) {

              $mail =mail('test@test.com', 'Demande de devis / Quote request', $message, $encode);
              echo "<p class='success'>".__( 'Your message has been sent to our service.', 'twentyeleven' )."</p>"; // Message d'alerte success

            } else if ($subject == 2) {

              $mail =mail('test@test.com', 'Contact presse / Press contact', $message, $encode);
              echo "<p class='success'>".__( 'Your message has been sent to our service.', 'twentyeleven' )."</p>"; // Message d'alerte success

            }else if ($subject == 3) {

              $mail =mail('test@.com', 'Autre / Other', $message, $encode);
              echo "<p class='success'>".__( 'Your message has been sent to our service.', 'twentyeleven' )."</p>"; // Message d'alerte success

            } else  {
              echo "<p class='error'>".__( 'An error has occured, please try again.', 'twentyeleven' )."</p>"; // Message d'alerte error
            }

          }

        ?>

        <!-- Fin traitement formulaire et envoie de mail --><br><br>

Voila ceci est une alternative, mais si quelqu'un a la réponse concernant les variables de session, je suis preneur :)

Bon courage à tous.