通过计算不同的订单类型来避免设置相同的 Woocommerce 客户订单号

问题描述 投票:0回答:0

我通过计算数据库中不同的订单类型来设置 woocommerce 订单号。共有三种不同类型的订单:A、B、C。最终的订单号是通过统计一个日期内不同订单类型的数量来确定的。如果两个客户同时下单,比如12:23:54,则产生相同的订单号。如何避免这种情况?在此先感谢您的任何输入。

订单类型存储为订单自定义字段:order_type

结账设置订单号功能:

add_action( 'woocommerce_checkout_update_order_meta', 'saving_checkout_cf_data');
function saving_checkout_cf_data( $order_id ) {
    global $wpdb;
    $order_type = $_POST['order_type'];
    $suffix = date("Ymd");
    $date = date("Y-m-d");
    $date_string = "> '$date'";
    $in = "1";
    if ($order_type=='A'){
        $count_A = $wpdb->get_row("SELECT COUNT(*) AS THE_COUNT 
        FROM $wpdb->posts
        INNER JOIN $wpdb->postmeta
        ON $wpdb->posts.ID = $wpdb->postmeta.post_id
        WHERE (
        $wpdb->posts.post_type = 'shop_order'
        AND $wpdb->posts.post_date $date_string
        AND meta_key = 'order_type' 
        AND meta_value = 'A'
        )
        ");
        $final_count_A = sprintf("%03d", $count_A->THE_COUNT + $in);
        $final_id = $order_type . $suffix . $final_count_A;
        update_post_meta( $order_id , 'customer_order_number', sanitize_text_field( $final_id ) );
    } else if ($order_type=='B') {
        $count_B = $wpdb->get_row("SELECT COUNT(*) AS THE_COUNT 
        FROM $wpdb->posts
        INNER JOIN $wpdb->postmeta
        ON $wpdb->posts.ID = $wpdb->postmeta.post_id
        WHERE (
        $wpdb->posts.post_type = 'shop_order'
        AND $wpdb->posts.post_date $date_string
        AND meta_key = 'order_type' 
        AND meta_value = 'B'
        )
        ");
        $final_count_B  = sprintf("%03d", $count_B->THE_COUNT + $in);
        $final_id = $order_type . $suffix . $final_count_B;
        update_post_meta( $order_id , 'customer_order_number', sanitize_text_field( $final_id ) );
    } else {
        $count_C = $wpdb->get_row("SELECT COUNT(*) AS THE_COUNT 
        FROM $wpdb->posts
        INNER JOIN $wpdb->postmeta
        ON $wpdb->posts.ID = $wpdb->postmeta.post_id
        WHERE (
        $wpdb->posts.post_type = 'shop_order'
        AND $wpdb->posts.post_date $date_string
        AND meta_key = 'order_type' 
        AND meta_value = 'C'
        )
        ");
        $final_count_C = sprintf("%03d", $count_C->THE_COUNT + $in);
        $final_id = $order_type . $suffix . $final_count_C;
        update_post_meta( $order_id , 'customer_order_number', sanitize_text_field( $final_id ) );
    }
    }
wordpress woocommerce checkout
© www.soinside.com 2019 - 2024. All rights reserved.