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间、3间房的预订,选择不同的入住时长,确认价格计算是否符合预期;
- 如果遇到价格不更新的情况,检查是否缓存了价格,尝试清除插件缓存或浏览器缓存后再测试。
内容的提问来源于stack exchange,提问作者Chinohikari
相关产品推荐
相关产品推荐

