专注于外贸建站,分享WordPress教程和Elementor教程

WooCommerce:如何实现自定义连续订单号

更新日期:2023-08-03
加入读者学习群
我用的页面编辑器
让我的客户网站GTmetrix测分A\A的主机Cloudways
独家优惠前3个月7折, 戳上方按钮注册即可自动带入优惠码LOYSEO
所赠主题插件价值>$49
主机送Astra Pro不限站点1年
gmail.comsina.com邮箱,注册易通过
遇到问题,联系我
来开通 SEO工具20+

WooCommerce的订单号为什么不是连续的? 如何用插件或代码实现自定义连续的订单号呢?譬如:NO-1001,接下来,我们进入正题。

WooCommerce:不用插件实现自定义连续订单号

为什么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);

解释一下上面这段代码,主要包含以下几个部分:

  1. get_next_sequential_order_number()函数用于获取下一个顺序订单号,它首先通过get_option()函数获取之前存储的订单号,如果没有则默认从1000开始。然后使用update_option()函数更新存储的订单号,以保证每次获取的订单号都是唯一的,并返回获取到的订单号。
  2. save_sequential_order_number_on_order_creation()函数用于在订单创建时保存自定义的顺序订单号到订单元数据。它调用了get_next_sequential_order_number()函数来获取下一个顺序订单号,并使用update_post_meta()函数将该订单号保存到订单元数据中。
  3. custom_sequential_order_number()函数用于获取自定义的顺序订单号。它首先获取订单元数据中保存的顺序订单号,然后将订单号前缀和该顺序订单号拼接在一起作为新的订单号,并返回该订单号。
  4. 最后,add_filter()函数将custom_sequential_order_number()函数注册为订单号的过滤器,以便在每次获取订单号时都使用自定义的顺序订单号。

综上所述,这些代码的目的是在 WooCommerce 站点上实现自定义顺序订单号。代码会自动递增顺序订单号,确保订单号的唯一性,并在创建订单时将顺序订单号保存到订单元数据中。最后,它会生成一个带有指定前缀和顺序订单号的自定义订单号。

自定义顺序订单号示例

根据这段代码生成的订单号示例如下:

  • NO-1000
  • NO-1001
  • NO-1002
  • NO-1003
  • NO-1004

总之,自定义的顺序订单号由指定的前缀和数字组成,数字部分会根据上一个订单号的值进行自动递增。

Picture of 外贸建站技术姐Bonnie
外贸建站技术姐Bonnie

Bonnie是LOYSEO的创始人,在建站领域有着超过14年的经验,热爱能将想法变为现实的WordPress,更是Elementor的忠实用户~

LOYSEO
让我的客户网站GTmetrix测分A\A的主机Cloudways
独家优惠前3个月7折, 戳上方按钮注册即可自动带入优惠码LOYSEO
所赠主题插件价值>$49
主机送Astra Pro不限站点1年
gmail.comsina.com邮箱,注册易通过
遇到问题,联系我
来开通 SEO工具20+