Как реализовать ежегодный сброс последовательных номеров заказов в пользовательском формате в WooCommercePhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как реализовать ежегодный сброс последовательных номеров заказов в пользовательском формате в WooCommerce

Сообщение Anonymous »

Я пытаюсь реализовать ежегодный сброс моего индивидуального последовательного номера заказа в WooCommerce.
Мой желаемый результат должен быть: AS-Y-SNo, где:
  • AS = Акроним компании
  • Y = Год заказа
  • SNo = Сгенерированный порядковый номер/индекс
Пример: AS-2025-0040
Мне удалось реализовать вышеупомянутый последовательный номер заказа, адаптировав код из ответа 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»