Si bien no sé mucho sobre la API de mensajes de texto (¡y espero que sus clientes opten por recibir actualizaciones de mensajes de texto!), lo que creo que está sucediendo es que new WC_Order
nunca lee sus datos de la base de datos. Cómo debe obtener un nuevo objeto de pedido es wc_get_order()
. sin embargo, el woocommerce_new_order
el gancho pasa a lo largo del $order
objeto como segundo parámetro
Entonces, si nos aseguramos de que nuestra devolución de llamada esté esperando un segundo parámetro, no es necesario volver a crear una instancia del objeto de pedido.
En cuanto a la parte 2, woocommerce_new_order
se activará cuando el pedido se guarde en la base de datos y no importa cuál sea el estado del pedido. En cambio, creo que podemos usar woocommerce_order_status_pending_to_processing
que es lo que usa el nuevo correo electrónico de pedido.
/**
* Sending SMS to customers on new orders.
*
* @param int $order_id The order ID. *
* @param WC_Order $order Order object.
*/
function custom_msg_customer_process_order( $order_id, $order ) {
$order_date = $order->get_date_created();
$billing_phone = $order->get_billing_phone();
$apiKey = urlencode('apikey');
// Message details
$numbers = array($billing_phone,91xxxxxxxxxx);
$sender = urlencode('TXTCL');
// Use sprintf() to replace placeholders with values.
$message = rawurlencode( sprintf( 'Thank you for buying from us, a Wellness product. Your order number %s Dated %s is confirmed.', $order_id, $order_date ) );
$numbers = implode(',', $numbers);
// Prepare data for POST request
$data = array('apikey' => $apiKey, 'numbers' => $numbers, "sender" => $sender, "message" => $message);
// Send the POST request with cURL
$ch = curl_init('https://api.textlocal.in/send/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// Process your response here
echo $response;
}
add_action('woocommerce_order_status_pending_to_processing', 'custom_msg_customer_process_order', 10, 2 );
Alternativa
Lo anterior depende de que su puerta de enlace configure el orden para processing
. Si no es así (o si no fue inicialmente pending
) entonces puede que no se dispare… ya que solo se dispara en la transición de pending
a processing
. Un gancho mejor en realidad podría ser woocommerce_payment_complete
. Pero tenga en cuenta que en la fuente, solo pasa 1 parámetro a sus devoluciones de llamada… el $order_id
(Similar a woocommerce_thankyou
gancho lo hace). Por lo tanto, el fragmento de código debería ajustarse para esperar solo un parámetro:
/**
* Sending SMS to customers on new orders.
*
* @param int $order_id The order ID. *
*/
function custom_msg_customer_process_order( $order_id ) {
$order = wc_get_order( $order_id );
// Quit early if not a valid order.
if ( ! $order ) {
return;
}
$order_date = wc_format_datetime( $order->get_date_created() );
$billing_phone = $order->get_billing_phone();
$apiKey = urlencode('apikey');
// Message details
$numbers = array($billing_phone,91xxxxxxxxxx);
$sender = urlencode('TXTCL');
// Use sprintf() to replace placeholders with values.
$message = rawurlencode( sprintf( 'Thank you for buying from us, a Wellness product. Your order number %s Dated %s is confirmed.', $order_id, $order_date ) ) );
$numbers = implode(',', $numbers);
// Prepare data for POST request
$data = array('apikey' => $apiKey, 'numbers' => $numbers, "sender" => $sender, "message" => $message);
// Send the POST request with cURL
$ch = curl_init('https://api.textlocal.in/send/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// Process your response here
echo $response;
}
add_action('woocommerce_payment_complete', 'custom_msg_customer_process_order' );
.