0

当订单被取消时,我为 WooCommerce 创建了一个钩子,如下所示:

add_action( 'woocommerce_order_status_cancelled', 'prefix_order_cancelled_hook' );

function prefix_order_cancelled_hook($order_id){
    write_log("Order ${order_id} has been cancelled")
}

现在,当状态更改为取消时,挂钩按预期调用,但输出执行不是我所期望的。我在日志中得到以下信息:

Order 4 has been cancelled
Order 5 has been cancelled
Order 6 has been cancelled

我已经看到这与我目前在商店中的订单数量相对应。有人可以帮助解释为什么会发生这种情况以及如何只为更改的订单运行一次钩子。

4

1 回答 1

0

似乎您的代码已针对所有订单执行。所以好像有问题$order_id。我认为您不能直接访问属性,但需要获取 WC_Order 对象的实例(自 Woocommerce 3.0+ 起),例如:

add_action( 'woocommerce_order_status_cancelled', 'prefix_order_cancelled_hook' );

function prefix_order_cancelled_hook($order_id){
    // get an instance of an WC_Order object
    $order = wc_get_order( $order_id );
    // get the ID of the order
    $order_id = $order->get_id();
    write_log("Order ${order_id} has been cancelled")
}
于 2020-09-01T17:19:58.960 回答