Script wp_mail con jQuery post per inviare email

31 mag 2011, 20:16:11
Visualizzazioni: 16.5K
Voti: 4

Devo inviare un'email da una pagina quando viene inviato un modulo.

Pensavo di usare jQuery post ma non sono sicuro da dove iniziare. Dovrei usare wp_mail()? E se sì, come potrei chiamarla?

Scusate se sembra vago. Sto cercando di inviare un'email al cliente prima che un form invii i suoi dati a un altro sito;

$('#donationForm').submit(function() {

// invia email al cliente prima di passare al form di pagamento Worldpay


// invia dati a Worldpay....
this.submit();

});
0
Tutte le risposte alla domanda 2
3
12

Innanzitutto aggiungi la tua funzione di elaborazione email e collegala agli hook wp_ajax nel tuo file functions.php in questo modo:

// Se vuoi che solo gli utenti loggati possano accedere a questa funzione usa questo hook
add_action('wp_ajax_mail_before_submit', 'mycustomtheme_send_mail_before_submit');

// Se vuoi che anche gli utenti non loggati possano accedere a questa funzione usa questo hook
add_action('wp_ajax_nopriv_mail_before_submit', 'mycustomtheme_send_mail_before_submit');

// Se vuoi che sia gli utenti loggati che quelli anonimi ricevano le email, usa entrambi gli hook sopra

function mycustomtheme_send_mail_before_submit(){
    check_ajax_referer('my_email_ajax_nonce');
    if ( isset($_POST['action']) && $_POST['action'] == "mail_before_submit" ){

    //invia email wp_mail( $to, $subject, $message, $headers, $attachments ); esempio:
        wp_mail($_POST['toemail'],'questa è la riga dell\'oggetto dell\'email','corpo del messaggio email');
        echo 'email inviata';
        die();
    }
    echo 'errore';
    die();
}

Poi all'interno del tuo file js del tema crea la chiamata AJAX in questo modo:

jQuery('#donationForm').submit(function() {

// invia email al cliente prima di passare al modulo di pagamento worldpay
var data = {
    action: 'mail_before_submit',
    toemail: $('#myemailfield').val(), // cambia questo con il campo email del tuo form
    _ajax_nonce: $('#my_email_ajax_nonce').data('nonce'),
};
jQuery.post(window.location.origin + "/wp-admin/admin-ajax.php", data, function(response) {
    console.log('Ricevuto dal server: ' + response);
});

});

Ora aggiungi il nonce al tuo footer.php poiché deve essere generato via PHP:

...
<span id="my_email_ajax_nonce" data-nonce="<?php echo wp_create_nonce( 'my_email_ajax_nonce' ); ?>"></span>
<?php wp_footer(); ?>
...

E dovresti essere pronto.

1 giu 2011 02:29:59
Commenti

grazie! ho fatto funzionare ma ho dovuto rimuovere '_ajax_nonce' perché causava errori. È importante? Dc

v3nt v3nt
1 giu 2011 15:18:23

è il modo corretto e la best practice per proteggere le chiamate ajax.

Bainternet Bainternet
1 giu 2011 15:41:44

Grazie, mi ci è voluto un po', ma questa è stata una spiegazione abbastanza chiara. Molto apprezzato.

plushyObject plushyObject
18 set 2016 21:34:58
0

Fondamentalmente, puoi utilizzare JavaScript per inviare a una funzione di WordPress, quindi la funzione di WordPress può richiamare wp_mail() per inviare il messaggio.

Un ottimo punto di partenza sarebbe l'utile articolo AJAX nei Plugin sul Codex. Ti guida attraverso tutti i passaggi necessari per aggiungere il tuo JavaScript sul front-end, il tuo PHP sul back-end e tutto ciò che devi fare per collegare i due insieme.

1 giu 2011 02:19:05