Je dois envoyer un email à partir d'une page lorsqu'un formulaire est soumis.
Je pensais utiliser jQuery post mais je ne sais pas trop par où commencer. Est-ce que j'utiliserais wp_mail()
? Et si oui, comment pourrait-il s'appeler?
Désolé si cela semble vague. J'essaie juste d'envoyer un courrier électronique au client avant qu'un formulaire n'envoie ses données sur un autre site;
$('#donationForm').submit(function() {
// send email to client before moving onto worldpay payment form
// send data to worldpay....
this.submit();
});
En principe, vous pouvez utiliser JavaScript pour publier une fonction WordPress. La fonction WordPress peut ensuite appeler wp_mail()
pour envoyer le message.
Un bon endroit pour commencer serait l’utile AJAX dans Plugins sur le Codex. Il vous guide à travers toutes les étapes nécessaires pour ajouter votre JavaScript sur le serveur, votre PHP sur le serveur, et tout ce que vous devez faire pour relier les deux.
Tout d’abord, ajoutez votre fonction de traitement de courrier électronique et raccordez-la à wp_ajax
comme ceci en utilisant votre functions.php
:
// if you want only logged in users to access this function use this hook
add_action('wp_ajax_mail_before_submit', 'mycustomtheme_send_mail_before_submit');
// if you want none logged in users to access this function use this hook
add_action('wp_ajax_nopriv_mail_before_submit', 'mycustomtheme_send_mail_before_submit');
// if you want both logged in and anonymous users to get the emails, use both hooks above
function mycustomtheme_send_mail_before_submit(){
check_ajax_referer('my_email_ajax_nonce');
if ( isset($_POST['action']) && $_POST['action'] == "mail_before_submit" ){
//send email wp_mail( $to, $subject, $message, $headers, $attachments ); ex:
wp_mail($_POST['toemail'],'this is the email subject line','email message body');
echo 'email sent';
die();
}
echo 'error';
die();
}
Ensuite, dans le fichier js de votre thème, créez l’appel AJAX comme suit:
jQuery('#donationForm').submit(function() {
// send email to client before moving onto worldpay payment form
var data = {
action: 'mail_before_submit',
toemail: $('#myemailfield').val(), // change this to the email field on your form
_ajax_nonce: $('#my_email_ajax_nonce').data('nonce'),
};
jQuery.post(window.location.Origin + "/wp-admin/admin-ajax.php", data, function(response) {
console.log('Got this from the server: ' + response);
});
});
Ajoutez maintenant le nonce à votre footer.php
car il doit être généré via PHP:
...
<span id="my_email_ajax_nonce" data-nonce="<?php echo wp_create_nonce( 'my_email_ajax_nonce' ); ?>"></span>
<?php wp_footer(); ?>
...
Et vous devriez être prêt.