如何从 WooCommerce 获取自定义运输方式包

How to get custom shipping method packages from WooCommerce

我根据WooCommerce Shipping Method API documentation写了自定义送货方式。它工作正常,并且在计算购物车和结帐页面上的价格时正在做我需要的事情。我在结账页面上也有验证功能,我正在获取包裹,然后将其与选择的方法进行比较。

代码如下:

$packages = WC()->shipping->get_packages();
$chosen_methods = wc_get_chosen_shipping_method_ids();

if (is_array($chosen_methods) && (in_array('new_standard', $chosen_methods) || in_array('new_fast', $chosen_methods) || in_array('new_express', $chosen_methods))) {        
    foreach ($packages as $i => $package) {         
        if ($chosen_methods[$i] != 'new_standard' && $chosen_methods[$i] != 'new_fast' && $chosen_methods[$i] != 'new_express') {
            continue;               
        }           
        // Here some validation code
        if ($package['destination']['city'] == 'Paris') {
            // Bla bla bla
        }
    }       
}

你能帮我理解为什么一个订单需要多个包裹吗?为什么我获取的是运送方法数组 wc_get_chosen_shipping_method_ids() 而不是获取方法的一个 ID。为什么我使用 foreach 循环到达那里,当它可以像这样更直接时:

// This is just example code of mine for showcase
$package = WC()->shipping->get_package();
if ($package['id'] == 'new_standard' || $package['id'] == 'new_fast' || $package['id'] == 'new_express') {
// validation code here
}

此外,主要问题是: 我怎样才能获得软件包并将它们与 WC_Order 一起使用。我需要调用一些外部 API,为此我需要做与上面描述的相同的事情。

因为当使用一些 3rd Party 运输相关插件或一些自定义代码时,您可以将购物车分成多个运输包裹,因此您可以有多种运输方式(每个运输包裹一个)。

想象一下,您销售的产品可以很重也可以不重……想象一下您允许通过飞机、轮船和卡车运输……有些物品可以空运,有些则不能,这取决于它们的重量。
所以当购物车中有混合物品时(重型和普通),购物车将被分成不同的运输包裹。

这就是为什么有一系列选择的运输方式和一系列运输包裹(即使您不拆分购物车或不使用这些插件)。

因此只有少数 WooCommerce 商店使用多个运输包裹来混合购物车商品。

WooCommerce 订单运输方式的相关话题: