根据产品 SKU 向 WooCommerce 订单项添加随机字符串
Add random string to WooCommerce order items based on product SKU
我已经在 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
等?
说明/使用的功能
woocommerce_add_order_item_meta
挂钩自 WooCommerce 3 起为 deprecated。请改用 woocommerce_checkout_create_order_line_item
WC_Product::get_sku( $context );
- 获取SKU(库存单位)-产品唯一ID。
- 参见 PHP random string generator for different options. I used 解析代码。
所以你得到:
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 );
我已经在 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
等?
说明/使用的功能
woocommerce_add_order_item_meta
挂钩自 WooCommerce 3 起为 deprecated。请改用woocommerce_checkout_create_order_line_item
WC_Product::get_sku( $context );
- 获取SKU(库存单位)-产品唯一ID。- 参见 PHP random string generator for different options. I used 解析代码。
所以你得到:
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 );