可能不止一种方式来做到这一点,但我选择的方法是创建一个插件\Magento\Shipping\Model\Shipping,特别是collectRates()函数。当然我们的要求比你(底部)更具体。
基本的逻辑流程...
collectRates() (在\Magento\Shipping\Model\Shipping未修改的功能,收集率对所有的运输方式)
afterCollectRates() (插件)
- 此时所有运输方法被调用并存储在我们的价格$请求对象。
- 您可以确定是通过在车中的产品$请求- > getAllItems()
- 注:父/子产品是单独项目,并根据您的存储配置,一个或其他属性,你想看看可能没有自定义。
- 你可以看到所有通过航运方式/房价$请求- >的getResult)( - > getAllRates()
- 我没有找到一个核心函数删除的速度,我的解决方法是...
- 在利率取消设置的所有数据删除
- 毕竟利率被修改,使用foreach()循环将它们存储在一个tempArray(有一些逻辑不增加成本,如果== 0等)
- 现在刷新和重置通过所有现有利率$请求- >的getResult() - >复位()
- 最后,从您的加入率tempArray回
这取决于你如何计算利率,您可能还需要延长的各种运输方式,所以你完全可以绕过它们是某些产品在购物车(可能不适合你的使用情况,但对于任何试图关闭UPS /联邦快递/等。率)
正如前面提到的,我们的要求是更广泛,我们也有它实际上创造了产品阵列和其他逻辑(我们不得不限制各种运输方式,增加处理特定产品,并使用三维逻辑来创建一个列表beforeCollectRates()函数航运箱发送给UPS /联邦快递等实际CollectRates()的一部分。)