在我正在运行的应用程序中,我们需要阻止某些订单被发送到inFlow库存管理。
我想阻止状态为“估计”的订单在整个过程中产生。
从我所读到的,挂钩到woocommerce_webhook_should_deliver
和返回$should_delever == false
应该停止webhook从发射,但我无法让它。
function should_deliver_order_creation($should_deliver, $wc_webhook, $arg) {
$order = wc_get_order($arg);
$order->get_status();
if(str_contains($wc_webhook->get_name(), 'inFlow') && $order->get_status() == 'estimate') {
$should_deliver = false;
}
return $should_deliver;
}
add_filter('woocommerce_webhook_should_deliver', 'should_deliver_order_creation', 9, 3);
状态为'预估'的订单仍在处理中
是否有任何其他挂钩,我应该尝试进入,以使该命令停止通过?
2条答案
按热度按时间mzmfm0qo1#
woocommerce_webhook_should_deliver
是正确的,我认为唯一的方法来实现这一点。下面是几个可以验证代码的步骤:
1.您应该检查您的代码是否能够正确地获取order对象,您可以执行调试并死亡以查看
$arg
和order对象是否正确$order->get_status();
此行不做任何事情1.我建议不要比较webhook的名称,而是检查delivery url,因为任何人都可以更改hook的名称,而url必须是inFlow基础设施的目标
1.检查订单状态是否正确,似乎是非默认的,名称见those defaults,只要确保您的正确即可
我能够使用钩子用于稍微不同的目的,但也停止提供一些webhook,并让它工作,也许this code也能帮助你。
eblbsuwk2#
当webhook通过
order.created
触发器触发时,order对象为空,因此使用$order->get_status()
获取其状态将导致空字符串。我在尝试使用$order->get_items()
获取订单项目以确定是否应该交付webhook时遇到了同样的问题。当webhook通过
order.updated
触发器触发时,订单对象被完全填充,并包含正确的状态和订单项。在我的情况下,我可以从cart对象而不是order对象获取订单项:
wc()->cart->get_cart()
,但我不知道如何检索尚未完全存储的订单的订单状态。