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

如何同步JetBooking与JetEngine表单订单号并设置自增订单ID

实现自定义订单ID替代Post ID并关联预订单

以下是针对WordPress环境下的具体实现方案,假设你的自定义文章类型(CPT)slug为booking_order:

1. 生成自增格式的订单ID

通过WordPress选项存储当前最大订单编号,每次创建新订单时自增并格式化(比如第一单-001):

function generate_custom_order_id() {
    // 获取已存储的最大订单号,默认初始值为0
    $last_order_number = get_option('booking_last_order_number', 0);
    $new_order_number = $last_order_number + 1;
    
    // 自定义订单ID格式,可调整前缀、数字位数
    $formatted_order_id = '第一单-' . sprintf('%03d', $new_order_number);
    
    // 更新存储的最大订单号
    update_option('booking_last_order_number', $new_order_number);
    
    return $formatted_order_id;
}

2. 在Booking Order创建时自动保存自定义订单ID

使用save_post钩子,仅在订单首次创建时生成并保存为文章自定义字段:

function save_custom_order_id($post_id, $post, $update) {
    // 排除自动保存、修订版,仅针对目标CPT
    if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id) || $post->post_type !== 'booking_order') {
        return;
    }
    
    // 仅在新增订单时生成ID,避免更新时重复生成
    if (!$update) {
        $order_id = generate_custom_order_id();
        update_post_meta($post_id, '_custom_booking_order_id', $order_id);
    }
}
add_action('save_post', 'save_custom_order_id', 10, 3);

3. 在Booking Order后台列表显示自定义订单ID

添加自定义列并填充订单ID内容,方便后台管理查看:

// 给Booking Order列表添加"订单ID"列
function add_booking_order_id_column($columns) {
    // 在标题列后插入自定义列,可调整位置
    $columns = array_slice($columns, 0, 2, true) +
              array('custom_order_id' => '订单ID') +
              array_slice($columns, 2, null, true);
    return $columns;
}
add_filter('manage_booking_order_posts_columns', 'add_booking_order_id_column');

// 填充自定义列的内容
function populate_booking_order_id_column($column, $post_id) {
    if ($column === 'custom_order_id') {
        $order_id = get_post_meta($post_id, '_custom_booking_order_id', true);
        echo $order_id ? $order_id : '未生成';
    }
}
add_action('manage_booking_order_posts_custom_column', 'populate_booking_order_id_column', 10, 2);

4. 关联预订单与自定义订单ID

假设预订单CPT slug为pre_booking,通过自定义字段关联对应的Booking Order,同步保存自定义订单ID:

function link_pre_booking_to_order($post_id, $post, $update) {
    if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id) || $post->post_type !== 'pre_booking') {
        return;
    }
    
    // 获取预订单关联的Booking Order的Post ID(假设存储在`_linked_booking_order`字段)
    $booking_order_id = get_post_meta($post_id, '_linked_booking_order', true);
    if ($booking_order_id) {
        $custom_order_id = get_post_meta($booking_order_id, '_custom_booking_order_id', true);
        if ($custom_order_id) {
            // 将自定义订单ID保存到预订单的自定义字段中
            update_post_meta($post_id, '_linked_custom_order_id', $custom_order_id);
        }
    }
}
add_action('save_post', 'link_pre_booking_to_order', 10, 3);

关键说明

  • 请将代码中的CPT slug(booking_order、pre_booking)替换为你实际使用的slug
  • 可根据需求修改订单ID格式,比如去掉前缀、调整数字位数(%03d代表三位数字,可改为%04d生成四位)
  • 若需在前台显示自定义订单ID,直接调用get_post_meta($post_id, '_custom_booking_order_id', true)即可获取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:43:10