Woocommerce qué gancho usar para cambios de estado de pedidos

2 minutos de lectura

Avatar de usuario de Luigino
Luigino

En mi complemento personalizado, necesito detectar cada vez que el estado de un pedido cambia de wc_on_hold a wc_completed así que traté de escribir:

function so_status_completed( $order_id, $old_status, $new_status ) {       
    
    // if user is active , then get order amount and do all other personal calculations
    
    global $wpdb;
    $order = wc_get_order( $order_id );
    //$payment_method = $order->get_payment_method(); //returns payment method bacs,cheque,cod etc
    $user_id = $order->get_user_id();
    $total = $order->get_total();
    $order_data = $order->get_data(); 
    //$order_total = $order->get_formatted_order_total();
    $order_total = $order->get_total();
    
    echo '<script>console.log("Debug Objects: Check order_total ' . $order_total. '");</script>';

}
add_action('woocommerce_order_payment_status_changed','so_status_completed',10,1);

Pero cuando traté de cambiar una prueba de pedido de suspendida a completada, no pude acceder a la Consola de Chrome que resuena dándome el precio del pedido… tal vez usar add_action no sea la forma correcta de poner a un oyente en ese evento. ?

Además, ya que estoy aquí, estoy usando $order-get_total() que busqué en la red sobre su funcionalidad pero no encontré documentos profundos, así que quiero preguntarle si ese método es el correcto para recuperar el monto del pedido sin cargo. ¿aplicado?

¡Gracias! ¡¡¡Salud!!!

“Necesito detectar cada vez que el estado de un pedido cambia de wc_on_hold a wc_completed

Tendrías que cambiar tu gancho a woocommerce_order_status_changed.

“No pude acceder a la consola de Chrome, ese eco me da el precio del pedido”

no puedes usar javascript y console.log en este anzuelo. Tendrías que usar el die función o la error_log función para registrarlo en su debug.log expediente.


Usando die función

add_action('woocommerce_order_status_changed', 'so_status_completed', 10, 3);

function so_status_completed($order_id, $old_status, $new_status)
{

    $order = wc_get_order($order_id);

    //$order_total = $order->get_formatted_order_total();
    $order_total = $order->get_total();

    die($order_total);
}

Usando error_log función

dd_action('woocommerce_order_status_changed', 'so_status_completed', 10, 3);

function so_status_completed($order_id, $old_status, $new_status)
{

    $order = wc_get_order($order_id);

    //$order_total = $order->get_formatted_order_total();
    $order_total = $order->get_total();

    error_log(print_r('order total: ' . $order_total, true));
}

Segunda pregunta

“Ya que estoy aquí, quiero preguntarte si $order-get_total() ¿Es el correcto para recuperar el monto del pedido sin aplicar la tarifa?”

Es posible que desee echar un vistazo a la $order->get_subtotal() para los totales antes de envío, cupones e impuestos:

Por favor vea estas respuestas relacionadas:

  • https://stackoverflow.com/a/47782647/15040627
  • https://stackoverflow.com/a/61102779/15040627
  • https://stackoverflow.com/a/32634480/15040627
  • https://stackoverflow.com/a/44708344/15040627

¿Ha sido útil esta solución?