根据支付网关和转换状态更改 Woocommerce 订单状态

Change Woocommerce order status based on payment gateway and transition status

所以我知道如何根据支付网关更改状态。但是有没有办法也考虑到之前的订单状态?

我的问题如下:我们在客户签署电子合同后开始处理我们的订单。然后他们可以稍后通过几个网关(Stripe、COD、银行转帐或发票 - 我们发送付款链接)自由付款。

这意味着客户可以在我们的任何订单状态下付款(从待处理、等待签名到处理-未付款、交货-未付款、已完成等)。

我们还有 'Paid' 这些状态的版本:已处理、已付款等。

例如:支付网关 Stripe 触发状态 'Processing-paid'。如果之前的状态是 'Processing-unpaid' 就好了。然而,如果我们在这个过程中走得更远,比如在我们已经交付之后,理想情况下它应该从“未交付交付”更改为 'Completed'。

我一辈子都想不出如何完成这项工作。有什么想法吗?

这是一个使用 woocommerce_order_status_changed 挂钩的示例,您可以在其中定位订单状态转换 "from""to" ,将订单状态更改为任何其他状态。

在这个例子中,我的目标是状态 "from" delivery-unpaid"to" delivery-paid 将订单状态更改为 completed.

正如您在 Woocommerce 中看到的那样,订单状态是 slug (全部为小写)

您可以同时定位一个特定的支付网关 ID,例如 Stripe,使用类似:

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 文件。它应该有效。

如您所见,您可以添加尽可能多的 IF 语句来定位您需要将其更改为任何其他状态和支付网关的订单状态转换。

代码进入您的活动子主题(或活动主题)的 function.php 文件。它应该有效。