Script wp_mail con jQuery post
Necesito enviar un correo electrónico desde una página cuando se envía un formulario.
Pensé en usar jQuery post pero no estoy muy seguro por dónde empezar. ¿Debería usar wp_mail()
? Y si es así, ¿cómo podría llamarse?
Disculpen si parece vago. Solo intento enviar un email al cliente antes de que el formulario envíe sus datos a otro sitio;
$('#donationForm').submit(function() {
// enviar email al cliente antes de pasar al formulario de pago de worldpay
// enviar datos a worldpay....
this.submit();
});

Primero añade tu función de procesamiento de correo y enganchala a los hooks wp_ajax
así usando tu functions.php
:
// Si quieres que solo usuarios registrados accedan a esta función usa este hook
add_action('wp_ajax_mail_before_submit', 'mycustomtheme_send_mail_before_submit');
// Si quieres que usuarios no registrados accedan a esta función usa este hook
add_action('wp_ajax_nopriv_mail_before_submit', 'mycustomtheme_send_mail_before_submit');
// Si quieres que tanto usuarios registrados como anónimos reciban los correos, usa ambos hooks anteriores
function mycustomtheme_send_mail_before_submit(){
check_ajax_referer('my_email_ajax_nonce');
if ( isset($_POST['action']) && $_POST['action'] == "mail_before_submit" ){
//enviar correo wp_mail( $to, $subject, $message, $headers, $attachments ); ejemplo:
wp_mail($_POST['toemail'], 'este es el asunto del correo', 'cuerpo del mensaje del correo');
echo 'correo enviado';
die();
}
echo 'error';
die();
}
Luego dentro de tu archivo js del tema crea la llamada AJAX así:
jQuery('#donationForm').submit(function() {
// enviar correo al cliente antes de pasar al formulario de pago de worldpay
var data = {
action: 'mail_before_submit',
toemail: $('#myemailfield').val(), // cambia esto por el campo email en tu formulario
_ajax_nonce: $('#my_email_ajax_nonce').data('nonce'),
};
jQuery.post(window.location.origin + "/wp-admin/admin-ajax.php", data, function(response) {
console.log('Respuesta del servidor: ' + response);
});
});
Ahora añade el nonce a tu footer.php
ya que necesita generarse vía PHP:
...
<span id="my_email_ajax_nonce" data-nonce="<?php echo wp_create_nonce( 'my_email_ajax_nonce' ); ?>"></span>
<?php wp_footer(); ?>
...
Y ya estaría listo.

¡gracias! logré que funcionara pero tuve que eliminar '_ajax_nonce' porque estaba causando un error. ¿Es importante? Dc

es la forma correcta y la mejor práctica para proteger las llamadas ajax.

Básicamente, puedes usar JavaScript para enviar datos a una función de WordPress, luego la función de WordPress puede invocar wp_mail()
para enviar el mensaje.
Un excelente punto de partida sería el útil artículo AJAX en Plugins en el Codex. Te guía a través de todos los pasos necesarios para agregar tu JavaScript en el front-end, tu PHP en el back-end, y todo lo que necesitas hacer para unir ambos.
