这需要在 checkout 后创建订单时完成,将订单号设置为自定义元数据,以便每次从数据库读取订单号时保持轻量级流程.
以下代码将按国家代码、年份和递增编号(2位,或者您可以定义所需的位数)的顺序将订单编号设置为订单元数据.
// Set and save the order number as metadata
add_filter( 'woocommerce_checkout_create_order', 'save_order_number_metadata' );
function save_order_number_metadata( $order ) {
$digits = 2; // Number of desired digits for the number part
$year = date('Y', time()); // Get the current year
$country = $order->get_billing_country(); // Get the billing country
$data = get_option('wc_sequential_order_number'); // Get order number sequencial helper registered data
$number = isset($data[$year][$country]) ? intval($data[$year][$country]) + 1 : 1;
$data[$year][$country] = $number;
// Update order number sequencial helper registered data
update_option('wc_sequential_order_number', $data);
// Add order number as custom metadata
$order->add_meta_data('_order_number', sprintf('%s-%s-%s', $country, $year, str_pad($number, $digits, '0', STR_PAD_LEFT)), true);
}
// Read the order number from metadata
add_filter( 'woocommerce_order_number', 'define_order_number', 10, 2 );
function define_order_number( $order_id, $order ) {
if ( $order_number = $order->get_meta('_order_number') ) {
$order_id = $order_number;
}
return $order_id;
}
代码放在子主题的functions.php文件中(或插件中).测试和作品.
对于手动创建的订单,它需要一些不同的东西,因为语言代码尚未定义.