Пользовательский последовательный номер заказа для Woocommerce – возможно ли это [закрыто]Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Пользовательский последовательный номер заказа для Woocommerce – возможно ли это [закрыто]

Сообщение Anonymous »

Дальнейшее редактирование с использованием исходного вопроса и требований:
Требования просты:
Желаемый формат пользовательского последовательного номера заказа: AS-Y-SNo
  • AS = акроним компании, Y = год заказа, SNo (генерируемый порядковый номер/индекс)

    Ежегодный сброс из вышеуказанного SNo до 0001, когда начнется следующий год, т. е. 2026 год. -- Это проблема, которую мне нужно решить сейчас.
Сначала удалось решить часть путем адаптации: (См. снимок экрана: https://snipboard.io/0Si4wm.jpg — Список номеров заказов с 2024 по 2025 год — Ранее отменил заказ AS-2025-0040, что является неправильной последовательностью из-за неправильного используемого плагина — - если нет неправильно, номер индивидуального заказа (бесплатная версия))
Кодирование LoicTheAztec с помощью $country (задайте в WooCommerce последовательный номер заказа с префиксом страны и года)
// 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;
}

**** Теперь проблема заключается в том, как включить сброс номера заказа за год - например, AS-2025-SNo, в 2026 году SNo сбрасывается на 0001. Я могу Я не понимаю кодировку @Dishant в этой теме (мне не нужен код языка, так как мой префикс - просто «AS»):
// 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);

Не знаю, как включить это в приведенный выше код генерации SNo....

Это оригинальный код @Dishant со ссылкой на код языка, который мне не нужен :
//Orders Prefix
add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );

function change_woocommerce_order_number( $order_id ) {
$order = wc_get_order( $order_id );
if ( $order && $order->get_date_created() ) {
$language_code = pll_current_language(); // Detect current language
$new_order_id = generate_woo_order_sequence($language_code);

return $new_order_id;
}

return $order_id;
}

// Generate the sequence with language code passed
function generate_woo_order_sequence($language_code) {
$year = date('Y');
$option_name = "wc_custom_series_{$language_code}";

// 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);

return strtoupper($language_code) . '-' . $year . '-' . str_pad($current_number, 3, '0', STR_PAD_LEFT);
}

Большое спасибо... (Сделал все возможное, чтобы отредактировать вопрос, чтобы сделать его более ясным....)

Исходное сообщение:
Формат желаемого пользовательского последовательного номера заказа: AS-Y-SNo
AS = акроним компании, Y = год заказа , SNo (сгенерированный порядковый номер/индекс)
Смотрите ниже попытки кодирования: (эти два кода не были полностью успешными, поскольку один касается только части Prefix-Y, но не части SNo)
// Adding Prefix and Date
add_filter( 'woocommerce_order_number', 'ts_change_woocommerce_order_number', 1, 2 );
function ts_change_woocommerce_order_number( $order_id ) {
$prefix = 'AS';
$order = wc_get_order( $order_id );
$order_date = $order->get_date_created();
$display_date = $order_date->date('Y'); // Format date as 'y/m/d'
$new_order_id = $prefix . '-' . $display_date . '-' . $order_id; // Add a hyphen between date and order ID
return $new_order_id;
}

Пока это работает, но используется исходный идентификатор заказа из Wordpress. – Снимок экрана: https://snipboard.io/TJxy1j.jpg
Добавьте этот код генерации SNo в отдельный экземпляр фрагмента кода:
// Generate SNo
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;
}



Подробнее здесь: https://stackoverflow.com/questions/793 ... s-possible
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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