WooCommerce的订单号为什么不是连续的? 如何用插件或代码实现自定义连续的订单号呢?譬如:NO-1001,接下来,我们进入正题。
为什么WooCommerce中的订单ID(订单号)不是连续的?
在 WooCommerce 中,订单 ID 不是连续的,是因为它们是基于 WordPress 数据库中的 “posts” 数据表来生成的,这个表包含了许多其他类型的Post(如文章、页面、自定义Post类型等),订单也是一种 WordPress 自定义Post类型。在 WordPress 中,所有类型的Post都有一个唯一的 post ID,在 WooCommerce 中,订单 ID 实际上就是订单的 post ID。
虽然订单 ID 不是连续的,但 WooCommerce 会确保每个订单 ID 都是唯一的,并且在后台的订单列表和订单详细信息页面中,您可以方便地查看和管理每个订单的详细信息。
那么如何实现自定义连续的订单号呢?
你可以借助顺序订单号类的插件,譬如Sequential Order Number for WooCommerce,如果需求简单,也可以看看下方的代码是否适合你。
实现自定义连续订单号的代码片段
请在Code snippet插件中新增并启用下面这段php代码段。
// 获取下一个顺序订单号
function get_next_sequential_order_number() {
$current_order_number = (int) get_option('custom_sequential_order_number', 1000);//你可以将这里的1000改为其他数字,它代表起始订单号
update_option('custom_sequential_order_number', $current_order_number + 1);
return $current_order_number;
}
// 当订单创建时,保存自定义顺序订单号到订单元数据
function save_sequential_order_number_on_order_creation($order_id) {
$sequential_order_number = get_next_sequential_order_number();
update_post_meta($order_id, '_custom_sequential_order_number', $sequential_order_number);
}
add_action('woocommerce_new_order', 'save_sequential_order_number_on_order_creation', 10, 1);
// 自定义顺序订单号
function custom_sequential_order_number($order_id) {
$prefix = 'NO-'; // 这是订单号前缀,您可以根据需要自定义
$sequential_order_number = get_post_meta($order_id, '_custom_sequential_order_number', true);
if (!$sequential_order_number) {
return $order_id;
}
$new_order_id = $prefix . $sequential_order_number; // 为订单号添加前缀
return $new_order_id;
}
// 修改订单号为自定义顺序订单号
add_filter('woocommerce_order_number', 'custom_sequential_order_number', 10, 1);
解释一下上面这段代码,主要包含以下几个部分:
get_next_sequential_order_number()
函数用于获取下一个顺序订单号,它首先通过get_option()
函数获取之前存储的订单号,如果没有则默认从1000开始。然后使用update_option()
函数更新存储的订单号,以保证每次获取的订单号都是唯一的,并返回获取到的订单号。save_sequential_order_number_on_order_creation()
函数用于在订单创建时保存自定义的顺序订单号到订单元数据。它调用了get_next_sequential_order_number()
函数来获取下一个顺序订单号,并使用update_post_meta()
函数将该订单号保存到订单元数据中。custom_sequential_order_number()
函数用于获取自定义的顺序订单号。它首先获取订单元数据中保存的顺序订单号,然后将订单号前缀和该顺序订单号拼接在一起作为新的订单号,并返回该订单号。- 最后,
add_filter()
函数将custom_sequential_order_number()
函数注册为订单号的过滤器,以便在每次获取订单号时都使用自定义的顺序订单号。
综上所述,这些代码的目的是在 WooCommerce 站点上实现自定义顺序订单号。代码会自动递增顺序订单号,确保订单号的唯一性,并在创建订单时将顺序订单号保存到订单元数据中。最后,它会生成一个带有指定前缀和顺序订单号的自定义订单号。
自定义顺序订单号示例
根据这段代码生成的订单号示例如下:
- NO-1000
- NO-1001
- NO-1002
- NO-1003
- NO-1004
- …
总之,自定义的顺序订单号由指定的前缀和数字组成,数字部分会根据上一个订单号的值进行自动递增。