Magento2.3.7游客加购后注册 购物车additional_options等字段丢失
Magento 2.3.7 游客转注册后购物车规格字段丢失解决方案
问题触发场景
- 运行环境:Magento 2.3.7版本
- 复现路径:游客状态下将带规格参数的商品加入购物车,随后完成新账号注册并登录
- 异常表现:购物车商品关联的
info_buyRequest、additional_options规格字段丢失,导致商品选购参数展示异常、部分场景下无法正常结算 - 预期逻辑:账号注册完成后,游客状态下添加的购物车所有规格字段需要完整保留,不得出现篡改、丢失情况
问题根因
该问题属于Magento 2.3.7版本核心代码逻辑缺陷:系统执行游客购物车与注册用户购物车合并操作时,quote item模型加载未触发扩展属性读取逻辑,直接用未加载完整字段的商品项数据做覆盖写入,最终导致两个规格字段被空值替换丢失。
可落地修复方案
方案1:部署官方核心修复补丁
直接安装对应版本的官方修复补丁,补丁核心调整了购物车合并流程的字段加载逻辑:合并操作执行前强制加载所有quote item的扩展属性,确保info_buyRequest、additional_options字段值被完整读取后再执行写入,不会出现空值覆盖问题。
补丁部署完成后依次执行以下命令使修改生效:
bin/magento cache:flush bin/magento setup:di:compile bin/magento indexer:reindex
方案2:自定义插件拦截修复(无法安装补丁场景适用)
如果受项目部署限制无法直接安装官方补丁,可通过自定义模块开发完成修复:
- 在自定义模块的
etc/frontend/di.xml中配置插件,拦截购物车合并的核心方法Magento\Quote\Model\Quote::merge - 在插件的前置执行逻辑中,遍历游客来源购物车的所有商品项,将每个商品对应的
info_buyRequest、additional_options字段值按商品唯一标识做映射暂存 - 在插件的后置执行逻辑中,遍历合并后用户购物车的所有商品项,匹配之前暂存的字段值回写到对应商品项中,最后保存购物车即可
修复验证步骤
修复完成后按以下流程校验效果:
- 清空浏览器缓存与本地已存在的购物车数据,以游客身份添加多个带自定义规格的商品到购物车
- 进入注册页面提交新账号信息,完成注册后自动跳转登录
- 检查购物车内所有商品的规格参数展示是否完整,同时查询数据库
quote_item表对应记录,确认info_buyRequest、additional_options字段值完整无缺失
注意:修复操作执行前已经出现字段丢失的历史购物车数据无法自动恢复,需要引导用户重新添加对应商品到购物车补全参数。
内容的提问来源于stack exchange,提问作者i like magento
相关产品推荐
相关产品推荐

