我通过计算数据库中不同的订单类型来设置 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 ) );
}
}