gpt4 book ai didi

php - Magento 2 基于产品属性过滤运输方式

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:51 24 4
gpt4 key购买 nike

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

谢谢

最佳答案

可能有不止一种方法可以实现这一点,但我选择的方法是为 \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 等的运输箱。)

关于php - Magento 2 基于产品属性过滤运输方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37797246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com