Necesito poder enviar un correo electrónico al usuario cuando está en el proceso de pago, básicamente cuando está a punto de realizar la compra.
Agregué este código a mi functions.php pero sucede que envía el correo más de 1 vez de manera errática, creo que es debido a los condicionales que declaré pero no estoy muy seguro.
Aquí está el código:
if (is_user_logged_in() && !WC()->cart->is_empty()) { /*the current user data*/ $current_user = wp_get_current_user(); $email = $current_user->user_email; $name = $current_user->user_firstname; /*the mail structure*/ $to = $email; $subject = "¡Hola - " . $name . "!, tu compra está casi lista."; $body = ' //the mail body '; $headers = array('Content-Type: text/html; charset=UTF-8'); wp_mail($to, $subject, $body, $headers); } /*endif*/ } add_action('woocommerce_after_shop_loop_item', 'send_mail_when_is_in_checkout');El woocommerce_after_shop_loop_item no tiene nada que ver con la página de pago, pero se ejecuta en la página de la tienda; en su lugar, debe usar un enlace que solo se aplica a la página de pago, por ejemplo, woocommerce_before_checkout_form
Para evitar mensajes de error, es mejor verificar si WC->cart está realmente disponible antes de usarlo
Entonces obtienes:
function action_woocommerce_before_checkout_form() { // Only logged in users if ( ! is_user_logged_in() ) return; // WC Cart if ( WC()->cart ) { // Cart NOT empty if ( ! WC()->cart->is_empty() ) { // The current user $current_user = wp_get_current_user(); $email = $current_user->user_email; $name = $current_user->user_firstname; // NOT empty if ( ! empty ( $email ) && ! empty ( $name ) ) { // The mail structure $to = $email; $subject = sprintf( __( 'Hello %s, your message', 'woocommerce' ), $name ); $body = __( 'The mail body', 'woocommerce' ); // Headers $headers = array( 'Content-Type: text/html; charset=UTF-8' ); // Sends an email, similar to PHP's mail function wp_mail( $to, $subject, $body, $headers ); } } } } add_action( 'woocommerce_before_checkout_form', 'action_woocommerce_before_checkout_form' );Opcional: para enviar notificaciones por correo electrónico con el mismo diseño de las otras notificaciones por correo electrónico de WooCommerce
Reemplazar
// NOT empty if ( ! empty ( $email ) && ! empty ( $name ) ) { // The mail structure $to = $email; $subject = sprintf( __( 'Hello %s, your message', 'woocommerce' ), $name ); $body = __( 'The mail body', 'woocommerce' ); // Headers $headers = array( 'Content-Type: text/html; charset=UTF-8' ); // Sends an email, similar to PHP's mail function wp_mail( $to, $subject, $body, $headers ); }Con
// NOT empty if ( ! empty ( $email ) && ! empty ( $name ) ) { // Mailer $mailer = WC()->mailer(); // To, subject, message $to = $email; $subject = __( 'My subject', 'woocommerce' ); $message_body = __( 'My message', 'woocommerce' ); // Message head and message body $message = $mailer->wrap_message( sprintf( __( 'Hello %s', 'woocommerce' ), $name ), $message_body ); // Headers $headers = 'Content-Type: text/html\r\n'; // Send an email $mailer->send( $to, $subject, $message, $headers ); }