Gemäß @LoiTheAztecs früherem 02.01.2025 – Kommentare – :
Der folgende Code wurde früher von LoiTheAztec bereitgestellt .. es hilft teilweise.. Gemäß meinen neuen Kommentaren unten – der Front-End-Dankeschön-Seite – lautet die neue Reihenfolge AS-2025-0001 (nachdem ich verwendet habe Die vorherige Bestellung muss entsprechend ZURÜCKGESETZT werden.
Aber in den E-Mails, die wir erhalten haben, wurde stattdessen die ursprüngliche 6-stellige Bestell-ID von Wordpress/Woocommerce angezeigt ... die AS-2025 wurde nicht angezeigt. 0001. Daher benötigen wir eine Lösung für dieses Problem.
Die anderen Codes, die ich von Tyche erhalten habe, werden später weiter aktualisiert.
Code: Select all
// 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.
Bisher ist es mir gelungen, der Bestellnummer ein Präfix mit Anzeigedatum hinzuzufügen (Y ) – Jahr.
AS-2025-123456
Aber ich möchte eine fortlaufende Nummer erstellen und diese wird jedes Jahr zurückgesetzt ... beginnend mit 0001.
Dies ist die aktuelle Codierung, die ich verwendet habe für das Präfix und das Jahr:
Und Screenshot des erfolgreichen Versuchs: https://snipboard.io/tU0K3a.jpg
Code: Select all
// 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;
}
-- aber diese 4 Schritte funktionieren nicht... Bei der Testbestellung wird immer noch die ursprüngliche Bestell-ID von Wordpress angezeigt.
Indiqlive https://indiqlive.com/sequential-order- ... o-commerce -random-order-numbers (Teil 4 – Codierung): Hab es auch versucht und es hat nicht funktioniert....
Bearbeiten :
Es ist mir gelungen, den folgenden Code für die Generierung der fortlaufenden Nummer zu verwenden:
Code: Select all
// 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;
}
Eigentlich steht der Index bei 0005 (also AS-2025-0005), siehe dieser Screenshot. Wie setze ich den Index zurück?