Php 根据支付网关和过渡状态更改商业订单状态

Php 根据支付网关和过渡状态更改商业订单状态,php,wordpress,woocommerce,stripe-payments,payment-gateway,Php,Wordpress,Woocommerce,Stripe Payments,Payment Gateway,所以我知道如何根据支付网关更改状态。但是有没有一种方法可以同时考虑以前的订单状态 我的问题如下:客户签署电子合同后,我们开始处理订单。之后,他们可以通过两个网关(条纹、COD、银行转账或发票-我们发送支付链接)免费支付 这意味着客户可以在我们的任何订单状态下付款(从待处理、等待签名到处理未付款、未交付、已完成等) 我们也有这些状态的“付费”版本:处理付费、交付付费等 例如:支付网关条带触发状态“处理已支付”。如果以前的状态为“未付处理”,则可以。然而,如果我们在这个过程中走得更远,比如说,在我们

所以我知道如何根据支付网关更改状态。但是有没有一种方法可以同时考虑以前的订单状态

我的问题如下:客户签署电子合同后,我们开始处理订单。之后,他们可以通过两个网关(条纹、COD、银行转账或发票-我们发送支付链接)免费支付

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

我们也有这些状态的“付费”版本:处理付费、交付付费等

例如:支付网关条带触发状态“处理已支付”。如果以前的状态为“未付处理”,则可以。然而,如果我们在这个过程中走得更远,比如说,在我们已经交付之后,理想情况下应该从“未付交付”变为“已完成”

我一辈子都不知道该怎么做。有什么想法吗?

这里是一个使用钩子的示例,您可以将订单状态从“和”转换为“”,以将订单状态更改为任何其他状态

在本例中,我将状态从“
未付交货
”和“
已付交货
”定位到“
”,以将订单状态更改为
已完成

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

同时,您可以使用以下方法瞄准特定的支付网关ID条带

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文件。它应该可以工作。

您可以使用[add_action('woocommerce_order_status_changed','woo_order_status_changed',10,3);]方法和$order->status来获取当前状态,而不是手动在钩子中设置它,如果这样做有意义的话。谢谢@GavinSimpson!对不起,没有。我不太擅长编码(我是一个市场营销员,不是真正的开发者)。我更多的是复制/粘贴和实验,直到它像女孩一样工作。你愿意更具体一点吗?很抱歉没有回复@Florence,我周末都出去了(耶!)。又一次被洛伊克救了…@GavinSimpson别担心!非常感谢。所以我就试过了,真不敢相信这有多容易!非常感谢你!不过我注意到了一个小小的不便。订单注释中显示了旧状态转换(从>到)。该注释也出现在新的(正确的)订单转换注释之后。奇怪@FlorenceGielen在订单更新状态下,始终会生成管理订单注释。好的。我通过使所有付款循环通过“已收到付款”状态来实现这一功能,因此这些注释对店主来说是有意义的。再次感谢:)