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

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

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

我的问题是这样的:

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

  • 返 repo 物车数组中所有产品的列表及其相关权重
  • 访问用户在购物车中输入的当前邮政编码

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

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

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

    最终,我希望返回的是每个产品重量的排序数组。例如,假设购物车具有以下内容:
  • 项目 1,数量:1,每个 2lbs
  • 项目 2,数量:2,每个 5 磅
  • 项目 3,数量:1,每个 10 磅

  • 我想返回一个包含 [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
    }
    

    关于php - WooCommerce - 新的运输方式 - 如何查询单个产品的重量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18167623/

    10-13 01:11