Enviar un correo electrónico personalizado con una dinámica de sujeto y destinatario en Woocommerce

En Woocommerce, he sido capaz de crear personalizado meta de la caja con un botón, que envíe un correo electrónico, mediante Envío de un correo electrónico personalizado cuando WooCommerce checkout se pulsa el botón de respuesta existente de código. Se muestra la siguiente metabox:

MetaBox

Así que cuando hago clic en el botón se envía un correo electrónico, que funciona bien.

Mi pregunta:
¿Cómo puedo personalizar el código para enviar correo electrónico personalizado, necesito enviar "Tema" sólo (con id de pedido y el pago total) a la dirección de correo electrónico, que debe estar en formato: mobilenumber@domain.com (para que se envíe a SMS gateway y se entrega como SMS en un dispositivo móvil?

Por ejemplo:
Dirección de correo electrónico: 123456789@smsgateway.com
tema: Su orden {order_id} se ha hecho. Total: {order_total}. Gracias

1 Respuestas

  • LoicTheAztec
    4 de mayo de 2019

    Actualizado

    La primera función es opcional y se mostrará una necesaria checkout campo para el teléfono móvil.

    El segundo código de la función de visualización de un metabox en woocommerce admin el fin de editar páginas con un botón personalizado que va a desencadenar la acción. Cuando se pulsa va a enviar correo electrónico personalizado a la puerta de enlace SMS con:

    • una dinámica específica objeto que contiene el número de pedido y el importe total
    • una dirección de correo específica hecho de que el cliente teléfono móvil y una específica de la puerta de enlace de SMS nombre de dominio como 'smsgateway.com'.

    Nota: Cuando se utiliza wp_mail() la función, el mensaje es obligatorio (si no hay ningún mensaje o un vacío, el correo electrónico no se envía).

    El código:

    // 1. Add mandatory billing phone field (and save the field value in the order)
    add_filter( 'woocommerce_billing_fields', 'add_billing_mobile_phone_field', 20, 1 );
    function add_billing_mobile_phone_field( $billing_fields ) {
        $billing_fields['billing_mobile_phone'] = array(
            'type'        => 'text',
            'label'       => __("Mobile phone", "woocommerce") ,
            'class'       => array('form-row-wide'),
            'required'    => true,
            'clear'       => true,
        );
        return $billing_fields;
    }
    
    // 2. Send a specific custom email to a SMS gateway from a meta box
    
    // Add a metabox
    add_action( 'add_meta_boxes', 'order_metabox_email_to_sms' );
    function order_metabox_email_to_sms() {
        add_meta_box( 'sms_notification',
        __( 'SMS notification', "woocommerce" ),
        'order_metabox_content_email_to_sms',
        'shop_order', 'side', 'high' );
    }
    
    // Metabox content: Button and SMS processing script
    function order_metabox_content_email_to_sms(){
        global $pagenow;
    
        if( $pagenow != 'post.php' || get_post_type($_GET['post']) != 'shop_order' )
            return; // Exit
    
        if ( ! ( isset($_GET['post']) && $_GET['post'] > 0 ) )
            return; // Exit
    
        $order_id = $_GET['post'];
    
        $is_sent = get_post_meta( $order_id, '_sms_email_sent', true );
    
        // Sending SMS
        if ( isset($_GET['send_sms']) && $_GET['send_sms'] && ! $is_sent ) {
            // Get an instance of the WC_Order object
            $order = wc_get_order( $order_id );
    
            // Using the billing mobile phone if it exist, or the billing phone if not.
            if( $mobile_phone = $order->get_meta( '_billing_mobile_phone' ) ) {
                $phone = $mobile_phone;
            } else {
                $phone = $order->get_billing_phone();
            }
    
            // Email address: Customer mobile phone + @ + sms domain
            $send_to = $phone . '@' . 'smsgateway.com';
    
            // Subject with the order ID and the order total amount
            $subject = sprintf(
                __("Your order number %d with a total of %s is being processed. Thank you.", "woocommerce"),
                $order_id, html_entity_decode( strip_tags( wc_price( $order->get_total() ) ) )
            );
    
            // Message: It is required (we just add the order number to it).
            $message = $order_id;
    
            // Sending this custom email
            $trigger_send = wp_mail( $send_to, $subject, $message );
    
            // Displaying the result
            if( $trigger_send ) {
                $result  = '<span style="color:green;">' ;
                $result .= __( "The SMS is being processed by the gateway." );
    
                // On email sent with success, Mark this email as sent in the Order meta data (To avoid repetitions)
                update_post_meta( $order_id, '_sms_email_sent', $trigger_send );
            } else {
                $result  = '<span style="color:red;">' ;
                $result .= __( "Sorry, but the SMS is not processed." );
            }
            $result .= '</span>';
        }
    
        // Displaying the button
        $href = '?post=' . $order_id . '&action=edit&send_sms=1';
        $send_text = isset($is_sent) && $is_sent ? '<em><small style="float:right;"> ('. __("Already sent") . ')</small></em>' : '';
        echo '<p><a href="' . $href . '" class="button">' . __( "Send SMS" ) . '</a>'.$send_text.'</p>';
    
        // Displaying a feed back on send
        echo isset($result) ? '<p><small>' . $result . '</small></p>' : false;
    }
    

    Código va en function.php archivo de active child theme (o tema activo). Probado y funciona.


    Las cuatro posibilidades dentro de este deslizamiento:

    enter image description here

    Una vez que el SMS se envía una vez, la función está inactiva, para evitar repeticiones.