Senden Sie eine benutzerdefinierte E-Mail mit einem dynamischen Betreff und Empfänger in Woocommerce

In Woocommerce, habe ich die Möglichkeit zum erstellen von benutzerdefinierten meta-box mit einer Schaltfläche, die senden Sie eine E-Mail, mit Senden einer benutzerdefinierten E-Mail, wenn WooCommerce-checkout-button ist gedrückt vorhandenen Antwort-code. Es zeigt die folgenden metabox:

MetaBox

Also wenn ich auf die Taste sendet er eine E-Mail, das funktioniert Prima.

Meine Frage:
Wie kann ich das anpassen, dass der code zum senden von benutzerdefinierten E-Mail, da muss ich senden "Thema" nur (mit Bestell-id und die Zahlung insgesamt) an E-Mail-Adresse, die im format: mobilenumber@domain.com (so wird er senden, SMS-gateway und übermittelt werden, als SMS auf ein mobiles Gerät)?

Zum Beispiel:
E-Mail-Adresse: 123456789@smsgateway.com
Betreff: Ihre Bestellung {order_id} hat sich getan. Total: {order_total}. Danke

1 Antworten

  • LoicTheAztec
    4. Mai 2019

    Aktualisiert

    Die erste Funktion ist optional und zeigt einen erforderlichen checkout-Bereich für das Handy.

    Die zweite Funktion der code-Anzeige eine metabox in woocommerce-admin, um Seiten Bearbeiten mit einer benutzerdefinierten Schaltfläche, die die Aktion auslösen werden. Wenn diese Taste gedrückt wird, senden Sie benutzerdefinierte E-Mail-zu SMS-gateway:

    • einer bestimmten Dynamik unterliegen, enthalten, die Bestellnummer und der Gesamtbetrag
    • eine bestimmte E-Mail-Adresse aus dem Kunden-Handy und eine spezielle SMS-gateway, domain-Namen wie 'smsgateway.com'.

    Hinweis: Bei der Verwendung von wp_mail() - Funktion, die Meldung ist Pflicht (wenn es keine Meldung oder eine leere ein, die E-Mail wird nicht gesendet).

    Der code:

    // 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;
    }
    

    Code geht in function.php Datei der aktiven-Kind-Thema (oder Themas). Getestet und funktioniert.


    Die vier Möglichkeiten in diesem metabox:

    enter image description here

    Sobald die SMS wird gesendet, sobald die Funktion inaktiv wird, zu vermeiden Wiederholungen.