根据产品 SKU 向 WooCommerce 订单项添加随机字符串

问题描述

我在 WooCommerce 中设置了可变产品。

每个变体都有一个独特的 SKU。我的任务是检查购物车内的 SKU,然后根据 SKU,生成一些随机字符串(16 个字母数字字符)。

  • 如果购物车中的商品 (1) 是 SKU 'ABC',则为相应订单生成并存储 (x) 个唯一字符串。

  • 如果购物车中的商品 (2) 是 SKU 'DEF',则为相应订单生成并存储 (y) 个唯一字符串。

我查看了 woocommerce_add_order_item_Meta 钩子,但似乎无法在我创建的与此钩子关联的函数中访问商品数据?

我正在使用

add_action( 'woocommerce_add_order_item_Meta','experiment_add_order_item_Meta',10,3 );
function experiment_add_order_item_Meta( $item_id,$values,$cart_item_key  ) {
    // Get a product custom field value
    $custom_field_value = 'hithere';

    // Update order item Meta
    if ( ! empty( $custom_field_value ) ){
        wc_add_order_item_Meta( $item_id,'Meta_key1',$custom_field_value,false );
    }
}

但是我在试图从这一点上获取产品 SKU 时迷失了方向。我无法在函数var_dump() 看到 $values 等?

解决方法

说明/使用的功能

所以你得到:

function generate_random_string( $length = 16 ) {
    return substr( str_shuffle( str_repeat( $x = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',ceil( $length / strlen( $x ) ) ) ),1,$length );
}
 
function action_woocommerce_checkout_create_order_line_item( $item,$cart_item_key,$values,$order ) {
    // The WC_Product instance Object
    $product = $item->get_product();
    
    // Get product SKU
    $product_sku = $product->get_sku();
    
    // Generate random string
    $random_string = generate_random_string();
    
    // Compare
    if ( $product_sku == 'ABC' ) {
        $item->update_meta_data( '_random_string',$random_string );
    } elseif ( $product_sku == 'DEF' ) {
        $item->update_meta_data( '_random_string',$random_string );        
    } elseif ( $product_sku == 'GHI' ) {
        $item->update_meta_data( '_random_string',$random_string );        
    } else {
        $item->update_meta_data( '_random_string',$random_string );
    }   
}
add_action( 'woocommerce_checkout_create_order_line_item','action_woocommerce_checkout_create_order_line_item',10,4 );