Script wp_mail con jQuery post

31 may 2011, 20:16:11
Vistas: 16.5K
Votos: 4

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();

});
0
Todas las respuestas a la pregunta 2
3
12

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.

1 jun 2011 02:29:59
Comentarios

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

v3nt v3nt
1 jun 2011 15:18:23

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

Bainternet Bainternet
1 jun 2011 15:41:44

Gracias, esto me tomó un tiempo, pero fue una explicación bastante clara. Muy agradecido.

plushyObject plushyObject
18 sept 2016 21:34:58
0

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.

1 jun 2011 02:19:05