專注於架設企業網站,分享WordPress教學和Elementor教學

WooCommerce:如何實現自定義連續訂單號

更新日期:2023-08-25
同系列教程
加入讀者學習群
我用的頁面編輯器
讓我的客戶網站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

總之,自定義的順序訂單號由指定的前綴和數位組成,數位部分會根據上一個訂單號的值進行自動遞增。

外貿建站技術姐Bonnie
外貿建站技術姐Bonnie

Bonnie是LOYSEO的創始人,在建站領域有著超過14年的經驗,熱愛能將想法變為現實的WordPress,更是Elementor的忠實使用者~

LOYSEO
讓我的客戶網站GTmetrix測分A\A的主機Cloudways
獨家優惠前3個月7折, 戳上方按鈕註冊即可自動帶入優惠碼LOYSEO
所贈主題外掛程式價值>$49
主機送Astra Pro不限網站1年
gmail.comsina.com 郵箱,註冊易通過
遇到問題,聯繫我
來開通 SEO 工具20+