Мой желаемый результат должен быть: AS-Y-SNo, где:
- AS = Акроним компании
- Y = Год заказа
- SNo = Сгенерированный порядковый номер/индекс
Мне удалось реализовать вышеупомянутый последовательный номер заказа, адаптировав код из ответа LoicTheAztec. , о том, как установить последовательный номер заказа с префиксом страны и года:
// Set and save the order number as metadata
add_filter( 'woocommerce_checkout_create_order', 'save_order_number_metadata' );
function save_order_number_metadata( $order ) {
$prefix = 'AS';
$digits = 4; // Number of desired digits for the number part
$year = date('Y', time()); // Get the current year
$data = get_option('wc_sequential_order_number'); // Get order number sequencial helper registered data
$number = isset($data[$year]) ? intval($data[$year]) + 1 : 1;
$data[$year] = $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', $prefix, $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;
}
Результат:
[img]https://i. sstatic.net/v8696hKo.png[/img]
Моя проблема сейчас:
Как включить номер заказа (SNo) сбрасывается каждый год, так что текущий AS-2025-0040, сбрасывается до AS-2026-0001 в 2026 году и так далее.
Я нашел ниже фрагмент кода из ответа Дишанта в той же теме, что, как мне кажется, это хорошая отправная точка, но я не уверен, как и где включить это в мой рабочий код выше:
// Reset if year has changed
$stored_year = get_option($option_name . "_year", -1);
if ($year > $stored_year) {
update_option($option_name, 1);
update_option($option_name . "_year", $year);
}
$current_number = get_option($option_name, 1);
update_option($option_name, $current_number + 1);
Подробнее здесь: https://stackoverflow.com/questions/793 ... rmat-in-wo
Мобильная версия