Script wp_mail con jQuery post per inviare email
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();
});
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.

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

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

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.
