3

我正在为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 个,每个 2 磅
  • 第 2 项,数量:2 个,每个 5 磅
  • 第 3 项,数量:1 个,每个 10 磅

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

这个问题的大部分可能是关于基本的面向对象编程,如果它作为一个愚蠢的问题出现,那么抱歉。

4

1 回答 1

3

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

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
}       
于 2013-09-29T06:29:22.787 回答