WooCommerce钩子执行顺序疑问:new_order与payment_complete相关钩子谁先触发?
问题
我正在使用woocommerce_new_order钩子实现访客结账时的用户注册功能,代码如下:
add_action( 'woocommerce_new_order', 'ap_woocommerce_new_order',10,1); function ap_woocommerce_new_order($order_id) { $order = wc_get_order( $order_id ); // 其他逻辑 }
同时我计划使用woocommerce_payment_complete_order_status_completed钩子将订单详情保存到自定义数据库,代码如下:
add_action( 'woocommerce_payment_complete_order_status_completed', 'ap_woocommerce_payment_complete_order_status_completed' ); function ap_woocommerce_payment_complete_order_status_completed($order_id){ // 处理订单逻辑 }
请问这两个钩子哪个会先触发?并且它们的触发顺序是否始终保持一致?
回答
触发顺序明确:
woocommerce_new_order先触发,woocommerce_payment_complete_order_status_completed后触发woocommerce_new_order的触发时机是订单创建完成的瞬间,只要订单在系统里生成(不管此时是待支付、已取消还是其他初始状态),这个钩子就会执行。woocommerce_payment_complete_order_status_completed的触发条件要严格得多:只有当订单完成支付,并且状态被更新为completed的时候,这个钩子才会被调用——这明显是订单创建之后的后续流程环节。
触发顺序始终保持一致
这是WooCommerce的核心流程逻辑决定的:订单必须先被创建出来,才有可能进行支付操作,进而触发状态变更的钩子。不存在订单还没创建就触发支付完成相关钩子的情况,所以两者的执行顺序是固定不变的。
如果你的业务逻辑是“订单创建时注册用户,支付完成且状态为completed时保存订单到自定义库”,这个钩子的搭配完全符合流程,不会出现逻辑顺序混乱的问题。
内容的提问来源于stack exchange,提问作者Toniq
相关产品推荐
相关产品推荐

