Woocommerce 哪个挂钩用于订单状态更改

Woocommerce which hook to use for order status changes

在我的自定义插件中,每次订单状态从 wc_on_hold 更改为 wc_completed 时我都需要捕捉,所以我试着写下:

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);

但是当我尝试将订单测试从暂停更改为已完成时,我无法进入 Chrome 的控制台,该控制台回显给我订单价格......可能使用 add_action 不是让监听器监听该事件的正确方法吗?

另外,因为我就在这里,我正在使用 $order-get_total() 我在网上搜索了关于他的功能但没有找到深入的文档所以我想问你这个方法是否正确一个检索订单金额而不收取费用?

谢谢!干杯!!!

"I need to catch every time an order status changes from wc_on_hold to wc_completed"

您需要将挂钩更改为 woocommerce_order_status_changed

"I couldn't get on Chrome's Console that echo giving me the order price"

您不能在此挂钩中使用 javascriptconsole.log。您需要使用 die 函数或 error_log 函数将其记录到您的 debug.log 文件中。


使用die函数

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

使用error_log函数

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

第二个问题

"since I am just here, I want to ask you if $order-get_total() is the right one to retrieve order amount without fee applied?"

您可能想查看 $order->get_subtotal() 运费、优惠券和税费前的总计:

请参阅这些相关答案: