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

时间:2013-08-11 00:29:42

标签: php wordpress plugins woocommerce

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

我是面向对象编程的新手,但对于如何正确访问我所在的方法/类之外的方法很困惑。

现在有一个名为calculate_shipping()的类,WooCommerce使用它。基本上,我的新发货方法扩展了WC_Shipping_Method类以添加这个新的。

我的问题是:

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

  1. 返回购物车阵列中所有产品的清单及其相关重量
  2. 访问用户在购物车中输入的当前邮政编码
  3. 从一些挖掘中我知道有一个名为$ cart_contents的数组似乎包含了我需要的一切。 (也许不是重量?)

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

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

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

    • 第1项,数量:1,每个2磅
    • 第2项,数量:每个5磅,
    • 第3项,数量:1,每个10磅

    我希望使用[10,5,5,2]返回一个数组,以便我可以运行一个算法,将这些产品放在最大重量的盒子中,并在每个盒子上返回单独的运费。

    这个问题的大部分内容可能都是基于面向对象的编程,如果它是一个愚蠢的问题,那就很抱歉。

1 个答案:

答案 0 :(得分: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
}