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

Pinpoint Booking System动态价格开发求助:获取房间数与日期参数

解决Pinpoint Booking System动态定价的实现方案

嘿,我刚好有处理Pinpoint Booking System动态定价的实战经验,给你一步步拆解怎么实现需求:

核心思路

我们需要借助Pinpoint提供的价格计算钩子,在钩子函数里获取预订的房间数量、入住/退房日期,然后根据房间数量对应的单价乘以住宿天数,返回修改后的总价。

具体代码实现

把下面的代码添加到你的主题functions.php文件里,或者创建一个自定义插件来存放(更推荐,避免主题更新丢失代码):

add_filter('pinpoint_booking_system_calculate_price', 'custom_service_dynamic_pricing', 10, 3);
function custom_service_dynamic_pricing($original_price, $booking_obj, $service_id) {
    // 替换成你需要设置动态定价的特定服务ID
    $target_service = 456; // 这里改成你的服务ID
    if ($service_id !== $target_service) {
        return $original_price; // 非目标服务,保持原价格
    }

    // 1. 获取房间数量,同时限制上限为3间
    $room_count = isset($booking_obj->room_quantity) ? (int)$booking_obj->room_quantity : 1;
    $room_count = min($room_count, 3);

    // 2. 计算住宿天数
    // 确保日期格式能被DateTime解析,若插件返回格式特殊,可改用createFromFormat指定格式
    $check_in = new DateTime($booking_obj->check_in);
    $check_out = new DateTime($booking_obj->check_out);
    $stay_nights = $check_out->diff($check_in)->days;

    // 3. 根据房间数量匹配对应单价
    switch ($room_count) {
        case 1:
            $nightly_rate = 200;
            break;
        case 2:
            $nightly_rate = 350;
            break;
        case 3:
            $nightly_rate = 450;
            break;
        default:
            $nightly_rate = 200; // 兜底默认值,比如0间房的情况按1间算
    }

    // 4. 计算最终总价并返回
    $final_price = $nightly_rate * $stay_nights;
    return $final_price;
}

关键细节说明

  • 钩子名称确认:不同版本的Pinpoint可能钩子名称略有差异,如果上面的pinpoint_booking_system_calculate_price不生效,可以查看插件源码里的apply_filters调用,常见的替代钩子有pinpoint_booking_system_price_calculation。
  • 房间数量字段:如果$booking_obj->room_quantity不对,你可以临时在函数里加var_dump($booking_obj); exit;(测试用,上线前删掉),打印出预订对象的所有属性,找到对应的房间数量字段(比如有些版本是number_of_rooms)。
  • 日期格式适配:如果插件返回的日期格式不是标准的Y-m-d,可以用DateTime::createFromFormat来指定格式,比如:
    $check_in = DateTime::createFromFormat('d/m/Y', $booking_obj->check_in);
    
  • 服务ID获取:在Pinpoint后台的「服务管理」页面,鼠标悬停在目标服务的编辑链接上,浏览器地址栏里的service_id参数就是你需要的ID。

测试建议

  1. 先在测试环境中添加代码,避免影响线上业务;
  2. 分别测试1间、2间、3间房的预订,选择不同的入住时长,确认价格计算是否符合预期;
  3. 如果遇到价格不更新的情况,检查是否缓存了价格,尝试清除插件缓存或浏览器缓存后再测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:49:41