You need to enable JavaScript to run this app. Woocommerce如何实现购物车多商品合并为单条预约记录
优惠活动
大模型
产品
解决方案
定价
更多

Woocommerce如何实现购物车多商品合并为单条预约记录

WooCommerce 购物车多票种合并为单条预约实现方案

实现思路

核心逻辑是给同一个预约场次的所有票种商品绑定唯一的场次标识,下单时将同一场次下的所有商品关联到同一条预约记录,替代默认按单个商品拆分预约的逻辑。

具体实现步骤

  • 第一步:给商品扩展场次元字段
    先给每个票种商品增加预约场次自定义元字段,相同日期/场次的成人票、儿童票、老人票绑定同一个场次ID,用来标识它们属于同一个预约。你可以用woocommerce_product_options_general_product_data钩子在后台商品编辑页添加场次输入框,用woocommerce_process_product_meta钩子保存字段值。
  • 第二步:购物车挂载场次标识
    用户加购商品时,将对应商品的场次ID存入购物车项的自定义数据中,用到woocommerce_add_cart_item_data钩子实现,确保同一个场次下的所有票种购物车项都携带相同的场次ID。
  • 第三步:下单时合并生成单条预约记录
    订单创建完成后,遍历订单内的所有商品,按场次ID分组,每组生成一条预约记录,把同组内所有票种的数量、类型都存入这条预约的元数据中。这里用woocommerce_checkout_create_order钩子处理,也可以根据你的业务触发时机换成woocommerce_order_status_completed等钩子。
    示例代码逻辑参考:
    add_action('woocommerce_checkout_create_order', 'merge_booking_items_by_session', 10, 2);
    function merge_booking_items_by_session( $order, $data ) {
        $session_groups = [];
        // 遍历所有订单项按场次分组
        foreach( $order->get_items() as $item_id => $item ) {
            $product = $item->get_product();
            $session_id = $product->get_meta('booking_session_id');
            if( !isset($session_groups[$session_id]) ) {
                $session_groups[$session_id] = [
                    'session_id' => $session_id,
                    'booking_date' => $product->get_meta('booking_date'),
                    'ticket_list' => []
                ];
            }
            // 存入当前票种的信息
            $session_groups[$session_id]['ticket_list'][] = [
                'ticket_type' => $product->get_name(),
                'quantity' => $item->get_quantity(),
                'unit_price' => $item->get_subtotal() / $item->get_quantity()
            ];
        }
        // 每组生成一条预约记录,booking_record替换为你实际用的预约自定义文章类型别名
        foreach( $session_groups as $session ) {
            $booking_id = wp_insert_post([
                'post_type' => 'booking_record',
                'post_title' => '预约记录-'.$session['booking_date'],
                'post_status' => 'publish',
                'meta_input' => [
                    'related_order_id' => $order->get_id(),
                    'session_detail' => $session
                ]
            ]);
        }
    }
    
  • 第四步:前端与后台展示适配
    修改预约列表页的展示逻辑,每条预约记录下展示对应所有票种的类型、数量、单价等信息,同时同步调整用户中心预约查询、订单邮件通知的模板,适配合并后的预约结构。

注意事项

  • 如果你用的是第三方预约插件实现的预约功能,只需要找到插件生成预约记录的官方钩子,替换上面示例中自定义创建预约的逻辑即可,不需要完全重构预约体系。
  • 加购阶段可以增加场次校验规则,避免用户把不同场次的票种加入同一个购物车导致合并逻辑异常,也可以加提示引导用户分批次结算不同场次的票。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 16:54:01