购物车抽屉将赠品或组合商品显示为原价
如果购物车抽屉将赠品或组合商品显示为原价,但购物车总额和结账页面金额正确,请检查购物车抽屉读取和刷新价格的方式。较旧的 Liquid 价格字段可能不会包含自动折扣,购物车抽屉也可能保留过时的购物车快照。本文将说明如何区分这两种情况。
快速检查:总额是否正确?
在进行任何修改前,请确认错误价格实际出现的位置:
- 如果购物车抽屉中的单行价格看起来不正确(赠品或折扣商品显示为原价),但购物车抽屉底部的购物车小计和结账页面总额正确,这只是显示问题。请继续阅读。
- 如果结账页面总额本身不正确,那就是另一个问题(例如其他折扣应用叠加,或折扣不匹配)。本文不涵盖这种情况。
Bundlex 不会渲染你的购物车抽屉。折扣由 Shopify 购物车折扣函数在结账时应用,Bundlex 无法重写主题中的单行价格显示。
为什么购物车抽屉显示原价
Bundlex 通过 Shopify 购物车折扣函数应用折扣。该函数会将折扣分配到购物车商品行,Shopify 将其视为一种自动折扣。
问题在于某些主题渲染购物车商品行的方式。较旧或自定义的购物车抽屉会使用 Liquid 字段 line_item.price 和 line_item.line_price 显示商品行价格。Shopify 官方文档将这些字段标记为已弃用,因为 它们不会反映自动折扣。因此,即使 Shopify 已正确记录该商品行的折扣,购物车抽屉仍会显示原始的未折扣价格。
买家看到的结果是:组合中的每个商品行都显示相同的原价单价,免费商品行看起来甚至像是被收费。同时,小计和结账页面金额是正确的,因为它们根据折扣后的数值计算。
使用 /cart.js 进行确认
无论购物车抽屉显示什么,你都可以证明折扣已正确应用:
- 在店面中,将组合(或包含免费赠品的优惠)添加到购物车。
- 在浏览器中,在同一商店打开
/cart.js(例如,访问https://yourstore.com/cart.js)。 - 找到受影响的商品行,然后查看
final_price和final_line_price。
对于正常工作的免费赠品行,你会看到类似 final_price: 0 和 final_line_price: 0 的内容,折扣会列在该商品行的 discounts 下方(包括优惠标题和折后金额)。请检查购物车抽屉实际渲染了哪些字段。上述弃用说明适用于 Liquid 的 line_item.price 和 line_item.line_price;仅凭 /cart.js 响应无法确定购物车抽屉的数据来源。
结果解读:
final_price/final_line_price反映了折扣,但购物车抽屉显示原价。请同时检查购物车抽屉渲染的字段,以及购物车发生变化后是否会刷新。final_price没有反映折扣。此时问题并非购物车抽屉显示问题。请改为检查购物车函数一侧,例如组合是否正确添加标签、折扣元字段是否为最新,或 B2B、客户标签等客户适用条件是否生效。
解决方法:使用 final_price 和 final_line_price
如果购物车抽屉的 Liquid 代码片段使用这些已弃用字段显示当前价格,请将其替换为对应的 final_ 字段:
line_item.price改为line_item.final_priceline_item.line_price改为line_item.final_line_price
final_字段包含行级折扣。如果您的购物车抽屉使用 JavaScript,还请确认更改后它会渲染最新的购物车响应或更新后的主题区块。替换价格字段无法修复过时的快照。
由于每行的
price值是静态 Liquid 属性,Bundlex 无法替您重写。折扣数据已经存在于final_price中,主题只需读取这些数据即可。
如果您使用原生的比较价
如果您的变体还带有 Shopify compare_at_price(例如“优惠 50%”这样的划线标记),该标记由主题根据变体数据渲染,与 Bundlex 折扣无关。切换到 final_字段后,商品行价格会反映 Bundlex 折扣,而比较价划线仍会按照您的主题配置显示。
另一种情况:价格为 $0 的赠品行残留在购物车中
还有一种相关但不同的情况:客户选择了包含免费赠品的优惠,随后将主商品数量减少到优惠门槛以下。主商品行会正确降至较低档位,但免费赠品行仍留在购物车中,并显示 $0。
原因如下。当数量低于门槛时,购物车函数会正确停止应用折扣并移除折扣分配。但 Shopify 购物车函数 无法移除购物车行(因为它没有可用的移除操作)。对于配置为 $0 目录变体的免费赠品,没有可以“恢复到”的价格,因此不再符合条件的赠品行会以 $0 继续留在购物车中。
为处理这种情况,Bundlex 提供了一个组件端清理功能,会在购物车发生更改后运行并移除孤立的赠品行。该功能只能在以下条件下运行:
- 仅限免费赠品。付费附加商品由组合完整性机制处理,而不是由此清理功能处理。
- 支持的购物车更改路径。当完整的 Bundlex 组件处于活动状态时,清理功能会处理 fetch 和 XHR 购物车更改。如果页面仅运行赠品清理脚本而没有组件,则拦截仅覆盖 fetch 更改。主题刷新行为仍可能影响购物车抽屉的显示内容。
- 清理功能会尽力执行。如果某个步骤失败,赠品行可能会继续显示,直到下一次购物车交互。
移除商品行后,Bundlex 会分发购物车刷新事件,提示主题重新渲染。在 Dawn 以及基于 Dawn 构建的 Shopify 免费主题中,Bundlex 还会重新绘制购物车抽屉、购物车页面和购物车图标上的数量。Shopify 没有一个所有主题都会实现的统一购物车更新事件,因此在其他未监听这些事件的主题中,购物车抽屉可能会保持过时状态,直到下一次交互。最重要的是:购物车计算始终正确。客户不会因残留的 $0 行而被收费,无论购物车抽屉暂时显示什么内容,结账总额都准确无误。
总结
- 购物车抽屉显示原价,但总额和结账金额正确?请检查是否使用了已弃用的 Liquid 价格字段,或购物车数据是否过时。
- 使用
/cart.js进行验证:final_price/final_line_price应反映折扣。 - 在主题中修复:将这些字段切换为
final_price和final_line_price。 - 减少数量后残留价格为 $0 的赠品行属于预期情况(Shopify 无法移除商品行);Bundlex 会在受支持的主题中清理该行,并且结账时的价格始终正确。
这篇文章对您有帮助吗?
您的反馈有助于我们改进文档。