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