当WooCommerce自动更新订单状态时,WooCommerce_Order_Status_Changed挂钩是否会触发?

时间:2019-02-15 作者:no.

我们有一个插件,它使用woocommerce_payment_complete hook,它根据项目和订单总额为客户计算订单分值。这将生成一个CSV文件,然后使用rsync 将CSV文件发送到存储和处理此数据的外部系统。

在同一个插件中,我们还使用woocommerce_order_status_changed 钩子根据新订单状态(退款项目等)重新计算值,生成CSV文件并再次发送到外部源。

这一切都很正常,客户可以下订单并生成CSV文件等,我们可以手动更新管理仪表板中的订单状态,并生成和发送新的CSV文件。然而,如果订单通过WooCommerce或支付网关自动更改,则似乎woocommerce_order_status_changed 由于未生成CSV文件,因此未触发挂钩。

所以我的问题是:

是否woocommerce_order_status_changed 当订单状态自动更改时,或者仅当我们在后端手动更改订单状态时,才会触发挂钩?

当订单状态通过WooCommerce/支付网关自动更改时,是否会触发挂钩?

我到处搜索,但每个结果似乎要么指向我已经在做的事情,要么指向设置一个脚本,使用$order->update_status() 和类似的替代品,这不是我们正在寻找的。

One of the results 确实提出了这一点(参考woocommerce_order_status_changed):

“如果使用挂钩(在WC芯中):不使用。”

这似乎回答了问题1,这让我相信,如果WooCommerce或支付网关自动更改订单状态,它将永远不会启动,从而不会创建我们的CSV等。

有人能解释一下吗?我们是否可以通过WooCommerce或支付网关在订单状态自动更改时触发挂钩?

1 个回复
SO网友:Jacob Peattie

其中一个结果确实提出了这一点(参考woocommerce_order_status_changed):

“如果使用挂钩(在WC芯中):不使用。”

这似乎回答了问题1,这让我相信,如果WooCommerce或支付网关自动更改订单状态,它将永远不会启动,从而不会创建我们的CSV等。

那不是什么意思。这意味着WooCommerce本身并没有为这个钩子添加任何额外的动作。并不是说它根本不会被解雇。

这个woocommerce_order_status_changed 每当使用$order->update_status()$order->set_status() 方法。WooCommerce仅在内部使用这些方法来更改订单状态(第三方扩展也应该使用)。因此,如果WooCommerce本身曾经自动或不自动更新订单状态,钩子将被触发。这包括在后端手动更新订单时。

如果某个扩展(如支付网关)试图错误地设置订单状态,则钩子不会触发。例如,如果他们使用$order->status = \'processing\'wp_transition_post_status( \'on-hold\', \'processing\', $order ); 那么钩子就不会开火了。

所以你需要找出什么情况下钩子没有开火。如果它是一个更新订单状态的支付网关,并且钩子没有启动,那么很可能它的开发人员没有正确地更改状态。此时,您需要与它的开发人员进行沟通。

相关推荐