Magento 2过滤基于产品属性的运输方法

use*_*138 5 php magento magento2

我是Magento 2的新手.任何人都知道如何根据购物车中产品的属性禁用送货方式.假设我们只想为某些产品启用商店取货.在单页结帐时,这些更新了post/rest/en/V1/guest-carts/SESSION_ID/estimate-shipping-methods但是尝试了模块checkout和module-quote,但仍然找不到这段代码的位置所以我可以扩展它.如果有人之前通过这个会有所帮助.

谢谢

mtn*_*cll 6

完成此操作的方法可能不止一种,但我选择的方法是为\Magento\Shipping\Model\Shipping创建一个插件,特别是collectRates()函数。当然,我们的要求比您的要求更具体(底部)。

基本逻辑流程是...

collectRates() (\Magento\Shipping\Model\Shipping 中的未修改函数,收集所有运输方式的费率)

afterCollectRates() (插件)

  • 此时,所有运输方法都已被调用,并且费率已存储在我们的$request对象中。
  • 您可以通过$request->getAllItems()确定购物车中的产品
    • 注意:子/父产品是单独的项目,根据您的商店配置,其中一个可能没有您想要查看的自定义属性。
  • 您可以通过$request->getResult()->getAllRates()查看所有运输方式/费率
  • 我没有找到删除费率的核心功能,我的解决方法是......
    • 取消设置要删除的速率中的所有数据
    • 修改所有费率后,使用 foreach() 循环将它们存储在tempArray 中(如果 cost==0 等,则使用一些逻辑不添加)
    • 现在通过$request->getResult()->reset()刷新并重置所有现有的费率
    • 最后,将tempArray 中的费率添加回


根据您计算费率的方式,您可能还想扩展各种运输方式,以便在某些产品在购物车中时可以完全绕过它们(可能不是针对您的用例,而是针对任何试图禁用 UPS/FedEx/等的人。费率)


如前所述,我们的要求更广泛,我们还有一个 beforeCollectRates() 函数,它实际创建了产品数组和一些其他逻辑(我们必须限制各种运输方式,为特定产品添加处理,并使用维度逻辑创建列表对于实际的 CollectRates() 部分,要发送到 UPS/FedEx 等的运输箱的数量。)