Shopware 6 Price Collector/Processor折扣计算错误问题咨询
问题原因
你的价格覆盖逻辑本身没有问题,出现折扣按原始价格计算的核心原因是购物车处理器的执行顺序错误:Shopware默认的促销折扣计算处理器执行优先级高于你的自定义价格覆盖处理器,折扣计算时读取的还是未被你修改的商品原始价格。
解决方案
调整自定义OverwritePriceCollector服务的执行优先级即可:
- 打开你插件目录下的
config/services.xml文件,找到你注册该服务的配置段 - 给
cart.processor标签设置更高的优先级(数值越大,执行时机越早),保证你的改价逻辑在促销计算前完成:
<service id="Test\TestPlugin\Core\Checkout\Cart\OverwritePriceCollector"> <argument type="service" id="Shopware\Core\Checkout\Cart\Price\QuantityPriceCalculator"/> <tag name="cart.data_collector"/> <!-- 优先级设置为5000,高于默认促销处理器的4500优先级,确保先执行改价 --> <tag name="cart.processor" priority="5000"/> </service>
如果调整优先级后问题仍存在,可以在process方法的价格赋值逻辑后,额外补充一行总价格刷新代码,确保所有价格字段同步更新:
// 原有逻辑 $product->setPrice($calculated); $product->setPriceDefinition($definition); // 新增代码 $product->setTotalPrice($calculated);
内容的提问来源于stack exchange,提问作者lucamario
相关产品推荐
相关产品推荐

