wordpress 阻止某些WooCommerce webhooks启动

owfi6suc  于 2023-04-29  发布在  WordPress
关注(0)|答案(2)|浏览(171)

在我正在运行的应用程序中,我们需要阻止某些订单被发送到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);

状态为'预估'的订单仍在处理中
是否有任何其他挂钩,我应该尝试进入,以使该命令停止通过?

mzmfm0qo

mzmfm0qo1#

woocommerce_webhook_should_deliver是正确的,我认为唯一的方法来实现这一点。
下面是几个可以验证代码的步骤:
1.您应该检查您的代码是否能够正确地获取order对象,您可以执行调试并死亡以查看$arg和order对象是否正确

  1. $order->get_status();此行不做任何事情
    1.我建议不要比较webhook的名称,而是检查delivery url,因为任何人都可以更改hook的名称,而url必须是inFlow基础设施的目标
    1.检查订单状态是否正确,似乎是非默认的,名称见those defaults,只要确保您的正确即可
    我能够使用钩子用于稍微不同的目的,但也停止提供一些webhook,并让它工作,也许this code也能帮助你。
eblbsuwk

eblbsuwk2#

当webhook通过order.created触发器触发时,order对象为空,因此使用$order->get_status()获取其状态将导致空字符串。我在尝试使用$order->get_items()获取订单项目以确定是否应该交付webhook时遇到了同样的问题。
当webhook通过order.updated触发器触发时,订单对象被完全填充,并包含正确的状态和订单项。
在我的情况下,我可以从cart对象而不是order对象获取订单项:wc()->cart->get_cart(),但我不知道如何检索尚未完全存储的订单的订单状态。

相关问题