Согласно предыдущему сообщению @LoiTheAztec от 02.01.2025 -- Комментарии -- :
Ниже код был предоставлен LoiTheAztec ранее .. это помогает частично.. Согласно моим новым комментариям ниже - страница благодарности переднего плана - имеет новый порядок как AS-2025-0001 (после того, как я использовал предыдущий порядок для СБРОСА соответственно).
Но в полученных электронных письмах вместо этого был показан исходный 6-значный идентификатор заказа Wordpress/Woocommerce... он не показывал AS-2025-0001. Поэтому нам потребуется какое-то решение этой проблемы.
Мы обновим другую партию кодов, которую я получил от Тайче, позже.
Код: Выделить всё
// Generate a sequential order number
add_action( 'woocommerce_order_status_changed', 'sequential_order_number_generation_process', 10, 4 );
function sequential_order_number_generation_process( $order_id, $from_status, $to_status, $order ) {
$order_number = $order->get_meta('_order_number'); // Get order number
if ( ! $order_number ) {
$index = (int) get_option('wc_sequential_order_number', 0); // Get Index (default value start at zero)
$digits = 4; // Number of digits
$index++; // Increase the index for the current order
$formatted_number = 'AS-' . date('Y') . '-' . str_pad($index, $digits, '0', STR_PAD_LEFT);
$order->add_meta_data('_order_number', $formatted_number, true);
$order->save();
update_option('wc_sequential_order_number', $index);
}
}
// Display the sequential order number from order meta data
add_filter( 'woocommerce_order_number', 'formatted_sequential_order_number_display', 10, 2 );
function formatted_sequential_order_number_display( $order_id, $order ) {
return $order->get_meta('_order_number') ?: $order_id;
}
// Reset the sequential index when needed
add_action( 'woocommerce_process_shop_order_meta', 'formatted_sequential_order_number_reset_index' );
function formatted_sequential_order_number_reset_index( $order_id ) {
$reset = false; // Reset index if needed: Set it to true
if ( $reset ) {
delete_option('wc_sequential_order_number');
}
}
//Reset the index
//To reset the index if needed, just change the $reset value from false to true, in the last function.
//In the admin, edit any order, and click on the "Update" button. Then change back the $reset value to `false.
//Now the sequential order number index will start at 0001 on the next order.
На данный момент мне удалось добавить префикс к номеру заказа с датой отображения (Y ) -- Год.
AS-2025-123456
Но я хотел бы создать порядковый номер, и он сбрасывается каждый год... начиная с 0001.
Это текущая кодировка, которую я использовал для префикса и года:
И скриншот успешной попытки: https://snipboard.io/tU0K3a.jpg
Код: Выделить всё
// Change Order Number format
add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );
function change_woocommerce_order_number( $order_id ) {
$prefix = 'AS'.'-'. date('Y');
$order = wc_get_order( $order_id );
$new_order_id = $prefix . '-'. $order_id ;
return $new_order_id;
}
-- но эти 4 шага не работают... В тестовом заказе по-прежнему отображается исходный идентификатор заказа из Wordpress.
Indiqlive https://indiqlive.com/sequential-order- ... o-commerce -random-order-numbers (Часть 4. Кодирование): тоже пробовал, не сработало....
Изменить:
Мне удалось использовать следующий код для генерации последовательного номера:
Код: Выделить всё
// Generate 4 digit number
add_filter( 'woocommerce_checkout_create_order', 'ts_save_order_number_metadata' );
function ts_save_order_number_metadata( $order ) {
$digits = 4; // Number of desired digits for the number part
$data = get_option('wc_sequential_order_number'); // Get order number sequential helper registered data
$number = isset($data['sequential']) ? intval($data['sequential']) + 1 : 1;
$data['sequential'] = $number;
// Update order number sequential helper registered data
update_option('wc_sequential_order_number', $data);
// Add order number as custom metadata
$order->add_meta_data('_order_number', str_pad($number, $digits, '0', STR_PAD_LEFT), true);
}
// Read the order number from metadata
add_filter( 'woocommerce_order_number', 'ts_define_order_number', 10, 2 );
function ts_define_order_number( $order_id, $order ) {
if ( $order_number = $order->get_meta('_order_number') ) {
$order_id = $order_number;
}
return $order_id;
}
На самом деле индекс равен 0005 (так AS-2025-0005), см. этот скриншот. Как сбросить индекс?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -the-index