所以我知道如何根据付款网关更改状态。但是,有没有办法考虑到先前的订单状态呢?
我的问题如下:我们在客户签署电子合同后开始处理订单。然后,他们可以通过几个网关(条带,COD,银行转帐或发票-我们发送付款链接)以后免费付款。
这意味着客户可以在我们的任何订单状态(从待处理,等待签名到处理无付款,交货无付款,已完成等)付款。
我们还具有以下状态的“付费”版本:处理中的付款,交货中的付款等。
例如,支付网关Stripe触发状态为“处理中”。如果以前的状态为“处理中未付款”,那就很好。但是,如果我们在整个过程中走得更远,比如说已经完成交付,那么理想情况下应该将其从“未交付交付”更改为“已完成”。
我无法为自己的一生弄清楚如何做到这一点。有什么想法吗?
答案 0 :(得分:1)
这里是一个使用woocommerce_order_status_changed
挂钩的示例,您可以在其中定位订单状态从“从” 和“到” 的过渡,以将订单状态更改为其他。
在此示例中,我将状态设置为“来自” delivery-unpaid
和“至” {{1} } 将订单状态更改为delivery-paid
。
正如您在Woocommerce中看到的,订单状态为“ (均为小写)” …
您可以同时使用 Stripe 这样的特定目标特定付款网关ID ,
completed
代码进入您的活动子主题(或活动主题)的function.php文件中。应该可以。
如您所见,您可以添加多达add_action( 'woocommerce_order_status_changed', 'change_order_status_conditionally', 10, 4 );
function change_order_status_conditionally( $order_id, $status_from, $status_to, $order ) {
if( $order->get_payment_method() === 'stripe' && $status_from === 'delivery-unpaid' && $status_to === 'delivery-paid' ) {
$order->update_status( 'completed' );
}
}
条针对订单状态转换的语句,您需要将其更改为任何其他状态和付款网关。
代码进入您的活动子主题(或活动主题)的function.php文件中。应该可以。