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

系统单预订trip_price数组动态求和及总价计算方案实现

问题背景

之前我在处理预订系统的总价计算时踩了个坑:一开始直接从post meta里取静态总价:

$booking_total = $post_metas['fcb_booking_total'][0];

但这种方式有个致命问题——当用户修改预订内容后,这个静态总价不会自动同步更新,导致邮件确认等场景展示的价格和实际订单完全不符。

我的核心需求是:

  • 计算单个订单下所有trip_price的实时总和
  • 结合以下业务规则算出最终总价:
    • 加收5%的附加费
    • 支持用户选择全额支付或50%预付
    • 允许管理员设置折扣金额

解决方案步骤

1. 动态拉取并累加所有trip_price

首先从数据库中获取当前订单对应的所有trip_price记录:

$get_price = $wpdb->get_results("select trip_price from fcb_booking where order_id = " . $order_id . " order by start_date_time asc");

执行后返回的是包含stdClass对象的数组,示例结果如下:

Array ( [0] => stdClass Object ( [trip_price] => 0 ) [1] => stdClass Object ( [trip_price] => 5000 ) )

接下来遍历数组,把所有trip_price累加得到动态总价,这样不管预订怎么修改,每次都会拉取最新的价格数据:

$get_price = $wpdb->get_results("select trip_price from fcb_booking where order_id = " . $order_id . " order by start_date_time asc");
$booking_total = 0;
foreach($get_price as $key => $value) { 
    $booking_total += $value->trip_price; 
};

2. 结合业务规则计算最终总价

在动态求和的基础上,加入附加费、支付选项和折扣的逻辑:

// 先叠加额外固定费用(如服务费等)
$total = $booking_total + $extra_total;
// 加收5%的附加费
$total = $total * 1.05;
// 如果开启预付且选择50%支付,总价减半
if($need_to_pay){ 
    if($amounttopay == 50){ 
        $total = $total / 2; 
    } 
}
// 减去管理员设置的折扣金额(折扣为正数时生效)
if($admin_discount>0){ 
    $total = $total - $admin_discount; 
}
return $total;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:47