如何同步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
相关产品推荐
相关产品推荐

