问题描述
我在 WooCommerce 中设置了可变产品。
每个变体都有一个独特的 SKU。我的任务是检查购物车内的 SKU,然后根据 SKU,生成一些随机字符串(16 个字母数字字符)。
我查看了 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。我使用了 https://stackoverflow.com/a/13212994/11987538 anser 代码。
所以你得到:
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 );