Последовательный номер заказа с пользовательским префиксом в WooCommerce: как сбросить индекс?Php

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

Сообщение Anonymous »

*** Обновление от 03.01.25 ****
Согласно предыдущему сообщению @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;
}
Я каждый раз пробовал другие кодировки с https://wcsuccessacademy.com/how-to-cha ... er-number/ (все шаги).
-- но эти 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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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