[Résolu] Bouton envoi Email via shortcode

  • WordPress :4.9.4
  • Statut : résolu
14 sujets de 1 à 14 (sur un total de 14)
  • Auteur
    Messages
  • #2149418
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    Bonjour,

    Ma configuration WP actuelle WordPress 4.9.5

    • Version de PHP/MySQL :
    • Thème utilisé : enfold
    • Extensions en place :
    • Nom de l’hébergeur : Strato
    • Adresse du site :

    Problème(s) rencontré(s) :

    Bonjour,

    Je souhaite avoir un bouton. Quand on clique sur ce bouton, un Email est envoyé à la personne qui a cliqué (c’est donc une personne déjà logguée et connue).

    J’utilise un shortcode pour faire cela.

    Mais j’ai du mal avec l’écriture du code.

    function boutoncode($atts, $content = null) {
        extract(shortcode_atts(array(
        'lien' => '#',
        'couleur' =>'bleu'
        ), $atts));
      
        $codecode = '
            <input class="bouton '.$couleur.'"  type="submit" name="envoyer" value="Cliquez ICI pour recevoir par Email le CODE PROMO" />
            <?php echo $_POST["envoyer"];
            if ( isset( $_POST["envoyer"] ) ) {   
           
               echo  "TEST";
            } ?>
        ';
    
        return $codecode;
       
    }
       add_shortcode('boutoncode', 'boutoncode');

    En fait, c’est avec ce qu’il y a dans $codecode que j’ai des problèmes.
    Par exemple, le <?php est traduit en <!–?php et du coup cela ne fonctionne pas.

    Je n’arrive pas à mettre la condition dans le shortcode.

    J’ai trouvé plein d’exemple mais ce sont des exemples comme:

    si valeur=oui
       $retour=super
    sinon
       $retour=non
    fin-si
    
    return $retour

    Or, moi j’ai ma condition qui est directement dans $retour (pour l’exemple ci dessus) ou plutôt dans $codecode dans l’exemple du début.

    et du coup, je n’arrive pas à intégrer cette condition dans la valeur à retourner.

    êtes vous déjà tombé sur ce cas de figure?

    Merci beaucoup pour votre aide

    Timama

    #2149436
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    j’ai fait une autre tentative comme ça

     

    /* Shortcode bouton */
    function boutoncode($atts, $content = null) {
        extract(shortcode_atts(array(
        'lien' => '#',
        'couleur' =>'bleu'
        ), $atts));
      
        $codecode = ' <input class="bouton '.$couleur.'"  type="submit" name="envoyer" value="Cliquez ICI pour recevoir par Email le CODE PROMO" />';
    
        $postcode = $_POST["envoyer"];
    
        if ( isset( $_POST["envoyer"] ) ) {   
           $codemail ='envoi du mail';
        }
    
        return $codecode . $postcode . $codemail;
       
    }
       add_shortcode('boutoncode', 'boutoncode');

    j’ai séparé du coup je n’ai plus l’erreur avec <?php.

    Mais quand je clique sur le bouton, je n’ai rien en valeur pour $_POST[« envoyer »]

    et je ne sais pas si je peux écrire
    <div>
    <div>return $codecode . $postcode . $codemail;</div>
    <div>car cela va tout executer même l’envoi du mail sans condition…</div>
    </div>
    <div>bon je continue…..</div>
    <div></div>
    <div>merci beaucoup  si vous avez une idée sur ce problème</div>

    #2149484
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    si je fais quelquechose comme cela, je n’ai plus de bouton et le if ne fonctionne pas…. car je n’arrive pas à bien l’écrire depuis le début….

    cela renvoie le code texto

     

    function boutoncode($atts, $content = null) {
        extract(shortcode_atts(array(
        'lien' => '#',
        'couleur' =>'bleu'
        ), $atts));
      
        $codecode = ' <input class="bouton '.$couleur.'"  type="submit" name="envoyer" value="Cliquez ICI pour recevoir par Email le CODE PROMO" />';
    
        $postcode = $_POST['envoyer'];
    
        $emailcode ='
        if ( isset($postcode) ) {   
            echo "TEST";
            //  include("send-email-contact.php"); 
         }';
    
        
        return $emailcode;
         
    }
       add_shortcode('boutoncode', 'boutoncode');

    je continue….. toujours pas trouvé

    #2149517
    sebastienserre
    Modérateur
    Maître WordPress
    747 contributions

    Bonjour,

    Avant de faire du PHP, il faut faire du html correct.

    Tu utilises des input, mais en dehors de balises  <form> et sans préciser les méthodes d’envois des données, ca ne peux donc pas fonctionner https://openclassrooms.com/courses/apprenez-a-creer-votre-site-web-avec-html5-et-css3/les-formulaires-8

     

    Ceci n’est qu’un lien parmi d’autres mais vous devez chercher comment créer des formulaires html puis vous les traiterez en PHP, puis vous saurez les transformer en shortcode WP

    #2149701
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    Bonjour,

    oui c’est tout à fait vrai.. désolée car j’avais commencé avec quelquechose comme

    <a class="bouton '.$couleur.'" href="'.$lien.'" target="_blank">' . do_shortcode($content) . '</a>';

    mais comme je ne voulais pas un lien mais une action, j’ai mis un input… c’est sur que sans method=post dans form ça marche pas..
    Bonne remarque….. une fois encore j’ai essayé de trouver une solution mais je me suis embrouillée….

    Merci sebastienserre….. je modifie ça (il me semble être passée par ça quand même à un moment de ma réflexion 😉 )

    #2149707
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    J’ai donc inclu le Input dans <form>.

     

    /* Shortcode bouton */
    function boutoncode($atts, $content = null) {
        extract(shortcode_atts(array(
        'lien' => '#',
        'couleur' =>'bleu'
        ), $atts));
      
        $codecode = ' 
        <form method="post" >
        <input class="bouton '.$couleur.'"  type="submit" name="envoyer" value="Cliquez ICI pour recevoir par Email le CODE PROMO" />
        </form>';
    
        $postcode = $_POST['envoyer'];
    
        $emailcode ='
        if ( isset($postcode) ) {   
            echo "TEST";
            //  include("send-email-contact.php"); 
         }';
    
        return $codecode . $postcode . $emailcode;
         
    }
       add_shortcode('boutoncode', 'boutoncode');

    Effectivement, j’ai un POST maintenant.

    Mais j’ai toujours mon problème de base, c’est à dire « je souhaite cliquer sur le bouton et alors ça envoi un Email ».
    Dans le cas au dessus, j’ai utilisé
    <div>
    <div>return $codecode . $postcode . $emailcode;</div>
    </div>
    <div></div>
    <div>car en fait, je ne sais pas trop quoi mettre en return..</div>
    <div>le $codecode m’affiche bien le bouton sur lequel je dois cliquer (du coup je pense qu’il faut le laisser)…</div>
    <div>le $postcode m’affiche bien une valeur (maintenant que j’ai bien écrit mon formulaire)</div>
    <div>mais le $emailcode m’affiche le code tel quel</div>
    <div></div>
    <div><code class= »language-html » data-lang= »html »> if ( isset($postcode) ) {
    echo « TEST »;
    // include(« send-email-contact.php »);
    }</div>
    <div></div>
    <div>je ne vois pas comment activer ce bout de code…. tout en mettant le bouton déjà dans le return….</div>
    <div>c’est toujours ça que je ne vois pas … comment faire</div>
    <div></div>
    <div>je continue à chercher…..</div>
    <div></div>

    #2149708
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    j’ai essayé ce code

    /* Shortcode bouton */
    function boutoncode($atts, $content = null) {
        extract(shortcode_atts(array(
        'lien' => '#',
        'couleur' =>'bleu'
        ), $atts));
      
        $codecode = ' 
        <form method="post" >
        <input class="bouton '.$couleur.'"  type="submit" name="envoyer" value="Cliquez ICI pour recevoir par Email le CODE PROMO" />
        </form>';
    
        $postcode = $_POST['envoyer'];
    
        
        if ( isset($postcode) ) {   
            $emailcode =' TEST';
            //  include("send-email-contact.php"); 
         }
    
        return $codecode . $postcode . $emailcode;
         
    }
       add_shortcode('boutoncode', 'boutoncode');

    et quand je clique, j’ai la valuer de mon post qui s’afiche et aussi « TEST »..

    du coup… je vais essayer d’envoyer un Email…. et je vais voir si cela fonctionne comme cela…..

    je reviens dès que j’ai testé… (avec la solution j’espère )!!

     

    #2150998
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    alors, j’ai toujours un problème. Je ne sais pas comment executer l’action « envoyer un Email’ à partir du shortcode.

    j’ai le code :

    function boutoncode($atts, $content = null) {
        extract(shortcode_atts(array(
        'lien' => '#',
        'couleur' =>'bleu'
        ), $atts));
      
        $codecode = ' 
        <form method="post" >
        <input class="bouton '.$couleur.'"  type="submit" name="envoyer" value="Cliquez ICI pour recevoir par Email le CODE PROMO" />
        </form>';
    
        $postcode = $_POST['envoyer'];
    
        if ( isset($postcode) ) {   
            //$emailcode = " wp_mail( 'myemail@gmail.com', 'test shortcode', do_shortcode($message), $headers, $attachments )";
            $headers = 'From: Maplus';
            $emailcode = mail('myemail@gmail.com', 'test shortcode', 'test', $headers); 
            //  include("send-email-contact.php"); 
         }
    
        return $codecode . $emailcode;
         
    }
       add_shortcode('boutoncode', 'boutoncode');

     

    Ceci me renvoi 1 (pas true ou false mais 1) et je ne reçois aucun Email.

    Et si je met $emailcode  avec = ‘  ‘  comme
    <div>
    <div>$emailcode = ‘ mail(‘myemail@gmail.com’, ‘test shortcode’, ‘test’, $headers)’ ;</div>
    </div>
    <div>cela écrit le texte du code sur l’écran.</div>
    <div></div>
    <div>du coup, je ne sais pas comment écrire le code pour que le shortcode execute l’envoi de l’email……</div>
    <div></div>
    <div>Avez vous déjà fait ça une fois ?</div>
    <div>merci pour votre aide</div>

    #2151005
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    j’ai essayé autre chose :

    function boutoncode($atts, $content = null) {
        extract(shortcode_atts(array(
        'lien' => '#',
        'couleur' =>'bleu'
        ), $atts));
      
        $codecode = ' 
        <form method="post" >
        <input class="bouton '.$couleur.'"  type="submit" name="envoyer" value="Cliquez ICI pour recevoir par Email le CODE PROMO" />
        </form>';
    
        $postcode = $_POST['envoyer'];
    
        if ( isset($postcode) ) {   
    
            // Code PHP pour traiter l'envoi de l'email - header général
            if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $email))
            {
            $passage_ligne = "\r\n";
            }
            else
            {
            $passage_ligne = "\n";
            }
            $headers = 'From: MAplus'.$passage_ligne;
            $headers .= "MIME-Version: 1.0".$passage_ligne;
            $headers .= 'Content-type: text/html; charset=UTF-8' .$passage_ligne;          
            mail('monmail@gmail.com', 'test shortcode', 'test', $headers);
            echo 'ENVOI ?'; 
            //  include("send-email-contact.php"); 
         }
    
        return $codecode;
         
    }
       add_shortcode('boutoncode', 'boutoncode');

     

    J’ai le bouton, je clique, j’ai le texte « ENVOI ? » qui s’affiche mais je ne reçois toujours pas d’Email.

    Donc cette fois ci, je n’ai pas inclue l’action « envoi de mail » dans un return…..

    du coup, je me demande si j’envoi bien le mail… (j’ai mis une vrai adresse Email bien sûr).

    a votre avis, est ce que l’action envoi de mail peut fonctionner ainsi ?

    #2151013
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    Quand j’essaie de voir ce que retourne mail

    function boutoncode($atts, $content = null) {
        global $wpdb;
        extract(shortcode_atts(array(
        'lien' => '#',
        'couleur' =>'bleu'
        ), $atts));
      
        $codecode = ' 
        <form method="post" >
        <input class="bouton '.$couleur.'"  type="submit" name="envoyer" value="Cliquez ICI pour recevoir par Email le CODE PROMO" />
        </form>';
    
        $postcode = $_POST['envoyer'];
    
        if ( isset($postcode) ) {   
    
            // Code PHP pour traiter l'envoi de l'email - header général
            if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", 'monemail@gmail.com'))
            {
            $passage_ligne = "\r\n";
            }
            else
            {
            $passage_ligne = "\n";
            }
            $headers = 'From: MAplus'.$passage_ligne;
            $headers .= "MIME-Version: 1.0".$passage_ligne;
            $headers .= 'Content-type: text/html; charset=UTF-8' .$passage_ligne;          
            mail('monemail@gmail.com', 'test shortcode', 'test', $headers);
    
            if (mail('maity_max@yahoo.fr', 'test shortcode', 'test', $headers)==true)
            {
                echo 'ENVOI';
            }
            else
            {
                echo ' PB ENVOI'; 
            }
            //  include("send-email-contact.php"); 
         }
    
        return $codecode;
         
    }
       add_shortcode('boutoncode', 'boutoncode');

     

    Avec le code ci dessus,  le texte ‘ENVOI s’affiche, cela veut dire que la fonction mail renvoi true.

    Mais je ne reçois pas de mail.

     

    auriez vous un indice ou une remarque pour moi ?

    merci beaucoup

     

     

     

    #2151574
    sebastienserre
    Modérateur
    Maître WordPress
    747 contributions

    Bonjour,

     

    Comme ca sans test c’est pas facile de debug, j’essaierais d’utiliser les fonctions de WP en premier lieu:

    WP Mail

    et voir ce que https://www.mail-tester.com/ reponds lorsque vous envoyez un mail depuis votre shortcode a l’adresse qu’ils fournissent.

    Si ca se trouve, vous ne le recevez pas pour des raisons autres que votre code.

     

     

    #2151585
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    bonjour, et meri.

    oui c’est sur je comprends.. j’ai aussi essayé avec WP_mail comme ça fonctionne pas , j’ai testé pas mal de chose.

    J’ai regardé les spams aussi….

    maintenant, il y a apparement un problème avec les adresses Email de l’hebergement et l’envoi d’Email à partir de ces adresses.
    Bon, je ne les utilise pas dnas mon shortcode mais si le smtp est bloqué peut être que cela vient de là ..

     

    je reviens avec la solution j’espère

    #2151598
    sebastienserre
    Modérateur
    Maître WordPress
    747 contributions

    avez vous testé le site que je vous ai signalé? S’il y a un soucis dans le transport du ail, il vous le signalera.

    c’est vrai que par defaut WP envoi des emails via l’adresse @example.com">wordpress@example.com et si l’adresse n’existe pas, bon nombre de serveurs blacklists l’expediteur….

     

    J’ai un mu-plugin qui permet de gérer ca: https://github.com/sebastienserre/thfo-mail-address

    #2152098
    Timama
    Participant
    Chevalier WordPress
    273 contributions

    Bonjour,

    Et bien le dernier code que j’ai posté fonctionne.

    En fait, l’envoi des mails ne fonctionnait pas à cause d’un problème sur l’hébergement.

    donc tout est bon !

    merci beaucoup !

14 sujets de 1 à 14 (sur un total de 14)
  • Vous devez être connecté pour répondre à ce sujet.