Do_action quand on modifie un paramètre (Créer un compte)

  • WordPress :6.1
  • Statut : non résolu
10 sujets de 1 à 10 (sur un total de 10)
  • Auteur
    Messages
  • #529009
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    Bonjour,

    <b>Ma configuration WP actuelle</b>
    <b>- Version de WordPress</b> : 4.1.1
    <b>- Version de PHP/MySQL</b> :
    <b>- Thème utilisé</b> : le mien
    <b>- Extensions en place</b> :
    <b>- Nom de l’hebergeur</b> : STARTO
    <b>- Adresse du site</b> :

    <b>Problème(s) rencontré(s)</b> :

    Bonjour,

    J’ai une liste de membres. Je voudrais envoyer un Email à un membre quand je modifie mon paramètre « admission »
    (je le passe de 0 à 1 par exemple ce qui veut dire qu’il fait partie du club maintenant) et seulement quand je le passe de 0 à 1.

    J’ai créé la fonction (d’envoi d’Email..ça ça fonctionne… je passe les détails)
    <div class= »bbcode_code »>
    <div class= »bbcode_code_head »>Code:</div>
    <div class= »bbcode_code_body » style= »white-space: pre; »>

    function envoimail_admission(){

    $destinataire1 = ‘mail@example.com’;
    $sujet1 = ‘données’;
    $contenu1 =  »;
    $contenu1 .= ‘Bonjour, vous avez reçu un message à partir du site web du **** .
    ‘;
    $contenu1 .= ‘Login: ‘.$identifiant.’
    ‘;
    $contenu1 .= ‘Mot de passe: ‘.$mot_de_passe.’
    ‘;
    $contenu1 .=  »; // Contenu du message de l’email (en XHTML)

    mail($destinataire1, $sujet1, $contenu1, $headers); }

    add_action( ‘mail_admission’, ‘envoimail_admission’ );

    </div>
    </div>
    Maintenant, je ne sais pas quand/où écrire le do_action.
    J’ai tenté
    <div class= »bbcode_code »>
    <div class= »bbcode_code_head »>Code:</div>
    <div class= »bbcode_code_body » style= »white-space: pre; »>if ($_POST[‘particulier_admission’] == 1)
    {
    do_action( ‘mail_admission’ );
    }</div>
    </div>
    Mais forcément, dès que je mets à jour le membre, pour lui la paramètre = 1 et il envoi le mail à chaque fois.

    Avez vous eu cette expérience?

    merci pour votre aide

    Timama

    • Ce sujet a été modifié il y a 7 mois par C_Lucien. Raison : Anonymisation à la demande de l'auteur
    #915895
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    comme c’est un button radio que j’utilise pour la variable d’admission, est ce que je peut lancer le do_action au click ?

    à votre avis?

    #915896
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    okay, j’ai fait ça et cela à l’air de fonctionner (bon le truc c’est que je ne sais pas comment mettre un champs personnalisé avec un button radio, ce qui fait que j’ai les bouton un peu en vrac….et je ne sauve pas la valeur du bouton mais bon …ça c’est une autre question
    http://www.wordpress-fr.net/support/viewtopic.php?pid=550476#p550476

    Donc, ce qui à l’air de fonctionner, c’est :

    <td> <input type="radio" name="particulier_admission" value="1" id="oui" onchange=" » /> <label class="oui" for="oui">oui</label><br /></td>
    <td> <label class="non" for="non">non</label><br /></td>

    Je fait mon do_action comme ça : onchange= »

    Cela vous semble t’il optimal ?

    merci pour vos conseils

    #915894
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    bon, alors en fait, cela ne fonctionne pas 😉 enfin, presque pas 😉

    J’essai toujours d’envoyer un Email à un membre quand je modifie mon paramètre « admission »
    (je le passe de 0 à 1 par exemple ce qui veut dire qu’il fait partie du club maintenant) et seulement quand je le passe de 0 à 1.
    Avec des bouton type radio (oui, non)

    si je met donc

    add_action( ‘mail_admission’, ‘envoimail_admission’ );

    function envoimail_admission(){

    envoi du mail …….
    }

    j’ai testé donc avec

    <th>Admission du membre particulier par le club </th>
    <td>
    <input type="radio" name="particulier_admission" value="1" id="oui"
    onchange= » « />
    <label class="oui" for="oui">oui</label>
    <br />
    <input type="radio" name="particulier_admission" value="0" id="non"
    />
    <label class="non" for="non">non</label>
    <br />
    </td>

    alors, cela m’envoie bien un Email, mais tout le temps : à chaque mise à jour du profil ou même si je met pas 1…

    avez vous une idée sur le sujet ?
    merci pour votre aide

    #915892
    mathieu789
    Participant
    Maître WordPress
    1082 contributions
    Timama wrote:
    Je fait mon do_action comme ça : onchange= »

    cela ne va pas du tout, j’ai l’impression que tu mélanges les différentes étapes de création de la page
    1 : le navigateur envois une requête HTTP au serveur
    2 : le serveur exécute le code PHP sur le serveur et renvoie les données (code HTML et JavaScript)
    3 : le navigateur affiche le code HTML et exécute le code JavaScript

    donc le « do_action mail_admission » se fait à l’étape 2, quand la page n’est même pas encore arrivée au navigateur

    si tu veux faire une action en PHP au moment de l’évènement « onchange », il faudrait que cet évènement lance une « requête AJAX » qui elle lancera un script en PHP
    tu vois mieux dans quel ordre se font les choses ?

    dans ton cas, tu veux détecter quand l’état « admission » change mais il change seulement au moment où l’information est enregistrée en base de données avec « update_usermeta » dans le code PHP.
    donc c’est à cet endroit qu’il faut comparer la nouvelle et l’ancienne valeur et envoyer un e-mail

    #915891
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    damned !! je savais bien que c’était pas bon ce que je faisais….

    okay, tu as raison, j’ai zappé des étapes…merci beaucoup mathieu9512 …

    donc, requête ajax qui lance le script « comparaison de l’ancienne valeur à la nouvelle dans usermeta et envoi de mail si et seulement si la nouvelle valeur = 1 »

    c’est parti :search:

    #915893
    mathieu789
    Participant
    Maître WordPress
    1082 contributions

    non tu n’as pas besoin d’AJAX, mais juste de code avant le « update_usermeta »

    $ancienneValeur = get_the_author_meta( ‘particulier_admission’, $user_id );
    $nouvelleValeur = $_POST[‘particulier_admission’];

    if ($ancienneValeur !== $nouvelleValeur) {
    // envoi e-mail
    }

    update_usermeta( $user_id, ‘particulier_admission’, $_POST[‘particulier_admission’] );

    #915890
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    heureusement que tu m’as arrêté dans ma lancée LOL

    merci beaucoup mathieu9512, c’est vraiment sympa…. je teste ça tout de suite 😉

    #915889
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    okay, ça fonctionne …. j’ai juste ajouté une condition

    if ($ancienneValeur !== $nouvelleValeur  && $nouvelleValeur==1) {
    // envoi e-mail
    }

    Sinon, cela m’envoi le mail dans les 2 cas…. génial !
    merci encore beaucoup mathieu9512 😉

    #915897
    Timama
    Participant
    Chevalier WordPress
    284 contributions

10 sujets de 1 à 10 (sur un total de 10)
  • Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.