Estoy tratando de enviarme un correo electrónico después de cada pedido realizado. El problema que tengo es que $order->get_total() y get_total_tax devuelven 0 en lugar del valor total real del pedido.
add_action( 'woocommerce_new_order', 'custom_after_order_created_hook', 12 , 1); function custom_after_order_created_hook($order_id) { $order = new WC_Order($order_id); $with_tax = $order->get_total(); $tax = $order->get_total_tax(); $without_tax = $with_tax - $tax; $to = "test@example.com"; $subject = "New order"; $content = " New order {$order->id} With tax: {$with_tax} Without tax: {$without_tax} Tax: {$tax} "; $status = wp_mail($to, $subject, $content); } Todos los valores además de $order_id y $order->id se evalúan como 0. $order_id tiene el valor adecuado. Este problema ocurre solo cuando se usa el gancho woocommerce_new_order (también intenté usarlo en una página personalizada; funciona correctamente), lo que me hace dudar.
No estoy seguro de cuál es el problema aquí, ¿alguna parte de mi código es asíncrona?
¿O tal vez se llama a este enlace antes de que el pedido se actualice con el precio pagado/información de impuestos?
¿Qué debo hacer para obtener información de precios aquí?
Gracias.
Este gancho de acción woocommerce_new_order se usa para modificar la función create_order(). Por lo tanto, es mejor que use el gancho de acción woocommerce_thankyou que activará su notificación de correo electrónico personalizada cuando se haya creado el pedido:
// Tested on WooCommerce versions 2.6+ and 3.0+ add_action( 'woocommerce_thankyou', 'new_order_custom_email_notification', 1, 1 ); function new_order_custom_email_notification( $order_id ) { if ( ! $order_id ) return; // Getting an instance of WC_Order object $order = wc_get_order( $order_id ); $with_tax = $order->get_total(); $tax = $order->get_total_tax(); $without_tax = $with_tax - $tax; $to = "test@example.com"; $subject = "New order"; $content = " New order {$order_id} With tax: {$with_tax} Without tax: {$without_tax} Tax: {$tax} "; wp_mail($to, $subject, $content); }El código va en el archivo function.php de su tema secundario activo (o tema) o también en cualquier archivo de complemento.
El código está probado y funciona.
Usar el gancho de acción
woocommerce_checkout_order_processeden lugar del gancho de acciónwoocommerce_thankyoutambién es una buena alternativa, puede ser incluso mejor. Solo tienes que reemplazar:add_action( 'woocommerce_thankyou', 'new_order_custom_email_notification', 1, 1 );Por:
add_action( 'woocommerce_checkout_order_processed', 'new_order_custom_email_notification', 1, 1 );
Respuesta de trabajo similar: Woocommerce: cómo enviar correos electrónicos personalizados según el tipo de pago
El gancho
woocommerce_checkout_order_processed(ubicado enWC_Checkout process_checkout()que también podría ser conveniente para este propósito.El código fuente del
WC_Checkout process_checkout()es interesante para obtener una vista del flujo de compra .