Con WooCommerce utilizo un tema especial que maneja las reservas para el servicio de alquiler de motos y scooters. Quiero obtener los datos relacionados con el pedido. Estoy intentando enviar un SMS cuando se envía una notificación por correo electrónico al cliente para completed , on hold , pending y ** processing** estado del pedido.

He usado el código a continuación, por ejemplo, que genera los datos que necesito en SMS:

$order = new WC_Order($order_id);
$status = $order->get_status(); // order status

if( 'completed' == $status || 'processing' == $status || 'pending' == $status || 'on-hold' == $status ){

    $user_phone = get_post_meta($order_id, '_billing_phone', true); 

    foreach ($order->get_items() as $item_id => $item) {

        $product_id = $order->get_item_meta($item_id, '_product_id', true); // product ID
        $product_name = get_post($product_id)->post_title; // Product description

        // Related Booking data to insert in SMS
        $book_check_in  = $order->get_item_meta( $item_id, '_st_check_in', true );
        $book_check_out = $order->get_item_meta( $item_id, '_st_check_out', true );
        $book_pick_up   = $order->get_item_meta( $item_id, '_st_pick_up', true );
        $book_drop_off  = $order->get_item_meta( $item_id, '_st_drop_off', true );

    }
    // Send SMS in SMS API
    file_get_contents("http://144.76.39.175/api.php?username=xxxxxxxxxxx&password=xxxxxxxxxxx&route=1&message%5B%5D=The+message&sender=NBWREN&mobile%5B%5D=xxxxxxxxxxx");

}

Esto no está funcionando. ¿Dónde debo conectar este código? Probé diferentes plantillas y todo lo que obtuve fueron unos 500 errores o simplemente no pasó nada.

Por favor, dame un poco de ayuda.

Gracias

2
Shaik 12 dic. 2016 a las 14:54
¿Cuál es el mensaje de error en la excepción 500?
 – 
ChrisBint
12 dic. 2016 a las 15:11

1 respuesta

La mejor respuesta

Puede utilizar una función personalizada enganchada en el enlace woocommerce_email_order_details , utilizando los objetos $order y $email incluidos. .

Podrá reorganizar el mensaje como desee, ya que este es solo un ejemplo.

He comentado este código para que entiendas cómo funciona:

add_action('woocommerce_email_order_details', 'send_sms_on_email_notifications', 10, 4);
function send_sms_on_email_notifications($order, $sent_to_admin, $plain_text, $email){

    $order_id       = $order->id; // get the order ID for Order object 
    $email_id       = $email->id; // get the email ID for Email object 
    $order_status   = $order->get_status(); // Get order Status

    // Array of Email IDs to avoid Admin email notifications (SMS sent twice on some notifications)
    $emails_ids_exceptions  = array('new_order', 'failed_order', 'customer_invoice', 'customer_note');

    // Your targeted order status
    $order_statuses = array('completed', 'processing', 'on-hold', 'pending');

    $send_the_sms = false;

    // Just for your targeted order statuses
    if( in_array( $order_status, $order_statuses ) ):

        // iterating in the order items
        foreach($order->get_items() as $item_id => $item):

            $prod_id   = $order->get_item_meta( $item_id, '_product_id', true ); // product ID
            $prod_name = get_post($prod_id)->post_title; // Product Name

            $mobile    = get_post_meta($order_id, '_billing_phone', true); // mobile phone

            // Related Booking data to insert in SMS
            $check_in  = $order->get_item_meta( $item_id, '_st_check_in', true );
            $check_out = $order->get_item_meta( $item_id, '_st_check_out', true );
            $pick_up   = $order->get_item_meta( $item_id, '_st_pick_up', true );
            $drop_off  = $order->get_item_meta( $item_id, '_st_drop_off', true );

            // stoping the loop (just for one item)
            break;

        endforeach;

        // Limiting to customer email notifications
        if( !in_array( $email_id, $emails_ids_exceptions ) )
        {
            // inserting the order data (variables) in the message
            $text = "Your order $order_id with $status status, for $prod_name. Your booking details: Check in time: $check_in, Check out Time: $check_out, Pick up $pick_up and drop of Time is $drop_off";

            $send_the_sms = true;
        }

        // TRIGGERING THE SMS
        if($send_the_sms)
        {
            // Replacing spaces by '+' in the message
            $message = str_replace(' ', '+', $text);

            // Inserting the message and the user number phone in the URL
            $url = "http://144.76.39.175/api.php?username=xxxxxxxxxxx&password=xxxxxxxxxxx&route=1&message%5B%5D=$message&sender=NBWREN&mobile%5B%5D=$mobile";

            // Triggering the SMS
            file_get_contents($url);
        }

    endif;

}

Este código funcionará para el primer artículo del pedido, suponiendo que las personas alquilen una bicicleta o un scooter a la vez.
El código se prueba principalmente, pero no puedo garantizar el SMS activado porque no puedo probarlo en su API de SMS. Espero que esto funcione ... Avísame.

El código va en el archivo function.php de su tema secundario activo (o tema). O también en cualquier plugin de archivos php.

5
LoicTheAztec 12 dic. 2016 a las 15:39
Gracias por la respuesta déjame comprobar
 – 
Shaik
12 dic. 2016 a las 15:50
Exactamente estaba esperando lo mismo gracias, realmente me ayudó mucho .. :)
 – 
Shaik
12 dic. 2016 a las 15:54
1
No estaba tan seguro de la URL generada por SMS ... Muy feliz de que esté funcionando. También he aprendido mucho sobre $ objeto de correo electrónico en las plantillas de correo electrónico de woocommerce ...
 – 
LoicTheAztec
12 dic. 2016 a las 16:56