WooCommerce 订单状态挂钩未触发

WooCommerce order status hook not triggering

我在这里使用这个小函数来检测订单是否设置为挂起。这发生在支付页面和支付提供商通知之间:

add_action( 'woocommerce_order_status_pending', 'status_pending' );
function status_pending( $related_job ) {
    error_log('Triggered');
}

问题是我没有收到任何显示该功能有效的错误日志。但它变得更加疯狂。当我通过仪表板将状态从已完成更新为待处理时,会出现日志。所以我完全不知道为什么它在结帐过程中不起作用。任何建议或想法可能是什么问题?

这是因为挂钩仅在订单状态更改时触发,而不是在订单创建时触发,还有另一个挂钩可用于检测新订单,您可以使用订单 ID 获取订单对象,您可以使用它来查找出订单状态:

add_action( 'woocommerce_new_order', 'prefix_new_wc_order',  1, 1  );
function prefix_new_wc_order( $order_id ) {
    $order = new WC_Order( $order_id );

}

上面的hook只在checkout过程中触发,后台创建订单不会触发。

"pending" 订单状态是客户进入支付网关之前订单的默认状态,就在订单创建之后。

所以最好的方法是在创建订单后,在付款方式处理之前使用挂钩:

1) 首先尝试 woocommerce_checkout_order_processed 动作钩子 (3 args):

add_action( 'woocommerce_checkout_order_processed', 'order_processed_with_pending_status', 10, 3 );
function order_processed_with_pending_status( $order_id, $posted_data, $order ) {
    error_log('Triggered');
}

2) 或者尝试 woocommerce_checkout_update_order_meta 动作挂钩 (2 args):

add_action( 'woocommerce_checkout_update_order_meta', 'order_processed_with_pending_status', 10, 2 );
function order_processed_with_pending_status( $order_id, $data ) {
    error_log('Triggered');
}

两者都应该有效……