WooCommerce-新的运输方式-如何查询单个产品的重量


WooCommerce - new shipping method - how to query individual product weights

我正在为WooCommerce编写一个插件,该插件使用我自己的算法创建一个自定义发货选项。

不过,我是面向对象编程的新手,对于如何正确访问所属程序之外的方法/类,我感到非常困惑

现在WooCommerce使用了一个名为calculate_shipping()的类。基本上,我的新装运方法扩展了WC_shipping_method类来添加这个新方法。

我的问题是:

my_new_shipping_class()->calculate_shipping()中,查询以下内容的正确方法是什么?

  1. 返回购物车阵列中所有产品及其相关重量的列表
  2. 访问用户在购物车中输入的当前邮政编码

通过一些挖掘,我知道有一个名为$cart_contents的数组,它似乎包含了我需要的一切。(也许不是重量?)

这是在WC_Cart->get_cart()下,不过也有一种称为$cart_contents的公共数组。访问其中任何一个的正确方式是什么?

单个产品的重量也可以在WC_Product->get_weight()下找到,但我不确定是否必须使用它。

最终,我希望返回的是每个产品重量的排序数组。例如,假设购物车有以下内容:

  • 项目1,数量:每个1,2lbs
  • 项目2,数量:每个2.5磅
  • 项目3,数量:每件110磅

我想返回一个带有[10,5,5,2]的数组,这样我就可以运行一个算法,将这些产品放置在具有最大重量的盒子中,并返回每个盒子的单独运输成本。

这个问题的大部分可能是关于基本的面向对象编程的,所以很抱歉,如果它被认为是一个愚蠢的问题。

如果其他人正在搜索有关此的信息,这就是我想到的。

calculate_shipping方法有一个$package参数,用于访问计算运费所需的信息。

$package['destination']提供了一组地址信息,我可以使用$package['destination']['postcode']访问邮政编码。

$package['contents']提供对购物车中项目阵列的访问(由购物车项目id键入)。在每个项中,都有一个data数组元素,它是WC_Product实例。以下是我如何访问所有产品重量:

foreach ( $package['contents'] as $item_id => $item ) {
    $product = $item['data'];
    $weight = $product->get_weight();
    // do something with the weight
}