You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PrestaShop:使用折扣码后在购物车摘要显示原价与折后价

PrestaShop购物车单品折后价获取方案

PrestaShop默认不会单独存储每个商品的折后价——因为折扣码(尤其是百分比类)是按订单总额计算的,系统只会记录总折扣金额,不会自动拆分到单个商品。所以你需要基于$cart对象里的现有数据自行计算,以下是具体方案:

一、百分比类折扣码(如示例中的20%折扣)

这种情况计算逻辑最直接,按总折扣率分摊到每个商品即可:

  1. 通过$cart->getProducts()获取购物车所有商品的详细数据,包括单品原价(税前price/税后price_wt)、数量等
  2. 计算订单总折扣率:总折扣金额 ÷ 折扣前订单商品总价
  3. 用单品原价乘以(1-折扣率)得到折后价,注意用Tools::ps_round()保持和PrestaShop一致的价格精度

示例代码:

// 获取购物车商品列表
$cartProducts = $cart->getProducts();
// 计算总折扣率
$totalDiscount = $cart->getOrderTotal(true, Cart::ONLY_DISCOUNTS);
$totalBeforeDiscount = $cart->getOrderTotal(true, Cart::ONLY_PRODUCTS);
$discountRate = $totalBeforeDiscount > 0 ? $totalDiscount / $totalBeforeDiscount : 0;

// 遍历计算每个商品的折后价
foreach ($cartProducts as &$product) {
    // 税后折后价
    $product['final_price_wt'] = Tools::ps_round($product['price_wt'] * (1 - $discountRate), 2);
    // 税前折后价
    $product['final_price'] = Tools::ps_round($product['price'] * (1 - $discountRate), 2);
}

二、固定金额类折扣码(如满减固定金额)

固定金额折扣需要自定义拆分规则,常用的是按单品金额占比分摊,逻辑如下:

  1. 计算每个商品的总价(单价×数量)占折扣前订单总商品价的比例
  2. 用总折扣金额乘以该比例,得到该商品分摊的折扣额
  3. 用(单品总价-分摊折扣)÷数量,得到单品折后价

示例代码:

$cartProducts = $cart->getProducts();
$totalDiscount = $cart->getOrderTotal(true, Cart::ONLY_DISCOUNTS);
$totalBeforeDiscount = $cart->getOrderTotal(true, Cart::ONLY_PRODUCTS);

foreach ($cartProducts as &$product) {
    // 计算当前商品总价占订单总商品价的比例
    $productTotal = $product['price_wt'] * $product['quantity'];
    $productRatio = $totalBeforeDiscount > 0 ? $productTotal / $totalBeforeDiscount : 0;
    // 分摊折扣金额
    $productDiscount = Tools::ps_round($totalDiscount * $productRatio, 2);
    // 计算单品税后折后价
    $product['final_price_wt'] = Tools::ps_round(($productTotal - $productDiscount) / $product['quantity'], 2);
}

关键注意点

  • 如果商品本身有单品促销价,要先以促销价为基础,再叠加订单级折扣码的计算
  • 确保区分税前/税后价格,和ERP要求的价格类型保持一致
  • PrestaShop 1.7+版本中,$cart->getProducts()返回的数组已包含完整的商品价格字段,可直接使用

内容的提问来源于stack exchange,提问作者ButcherFromHell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:17:14