Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.8k views
in Technique[技术] by (71.8m points)

php - Add assigned manager initials sequentially to WooCommerce order numbers

With the following code I am able to add a prefix and a suffix to WooCommerce order number:

add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );
function change_woocommerce_order_number( $order_id ) {
    $prefix = 'VK/';
    $suffix = '/TS';
    $new_order_id = $prefix . $order_id . $suffix;

    return $new_order_id;
}

How we can prefix the order number with shop manager initials sequentially from an array of shop managers initials?

This way we can assign equally WooCommerce orders to each one of them.

Any help?
question from:https://stackoverflow.com/questions/65897246/add-assigned-manager-initials-sequentially-to-woocommerce-order-numbers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

To have a prefixed order number with manager initials from an array of manager initials sequentially, use the following:

// Save prefixed order number as order meta data
add_action( 'woocommerce_checkout_update_order_meta', 'save_the_order_number', 10, 2 );
function save_the_order_number( $order_id, $data ) {
    // Here set the managers initials
    $initials = array('JKI', 'FGR', 'LFA', 'OPI', 'TME');
    
    $count    = count($initials); // Get the length of the array (manager initials count)
    $previous = get_option('last_assigned_manager'); // Load previous assigned manager initials value
    $prev_key = array_search($previous, $initials);  // Get the array key for previous manager initials value
    $now_key  = ($previous + 1) == $count ? 0 : $previous + 1; // Get the next array key (the current manager to be assigned)
    
    update_post_meta( $order_id, '_order_number', $initials[$now_key] . '-' . $order_id ); // Save prefixed order number 
    update_option( 'last_assigned_manager', $initials[$now_key] ); // Save current assigned manager initials value
}

// Assign order number meta data to get_orde_number method
add_filter( 'woocommerce_order_number', 'assign_order_number_from_meta_data', 10, 2 );
function assign_order_number_from_meta_data( $order_id, $order ) {
    // Get the order number (custom meta data)
    $order_number = $order->get_meta('_order_number'); 
    
    return $order_number ? $order_number : $order_id;
}

Code goes in functions.php file of the active child theme (or active theme). It should works.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...