我有一个生成唯一字符串的函数。这目前正在运作。但是,它适用于结账时出售的所有产品。我希望以下功能仅在特定产品在订单商品中时运行。
这是我到目前为止所做的:
add_action( 'woocommerce_order_status_processing', 'add_unique_id' );
function add_unique_id($order_id) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ($items as $item_id => $product ) {
$str = "";
$length= 45;
$characters = array_merge(range('A','Z'), range('a','z'), range('0','9'));
$max = count($characters) - 1;
for ($i = 0; $i < $length; $i++) {
$rand = mt_rand(0, $max);
$str .= $characters[$rand];
}
wc_add_order_item_meta($item_id, 'Member Number', $str);
}
}
答案 0 :(得分:0)
已更新 (针对产品类别)
此功能在购物车或结帐时无效,但在提交订单后生成。
我已经更改了您的代码,只允许此代代码用于定义的产品ID或产品类别(您需要在函数内部设置):
add_action( 'woocommerce_order_status_processing', 'add_unique_id', 10, 1 );
function add_unique_id( $order_id ) {
$order = wc_get_order( $order_id );
foreach ($order->get_items() as $item_id => $item_obj ) {
// HERE set YOUR targeted product ID
$targeted_product_id = 0; // 0 value make it work only for product category (below)
// HERE set YOUR product category (ID, slug or name… Or an array of values)
$category = 'memberships';
// If the targeted product ID or the product category is found in the order items.
if( $item_obj->get_product_id() == $targeted_product_id || has_term( $category,'product_cat', $item_obj->get_product_id() ) ) {
$str = "";
$length= 45;
$characters = array_merge(range('A','Z'), range('a','z'), range('0','9'));
$max = count($characters) - 1;
for ($i = 0; $i < $length; $i++) {
$rand = mt_rand(0, $max);
$str .= $characters[$rand];
}
wc_add_order_item_meta( $item_id, 'Member Number', $str );
}
}
}
代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。
此代码已经过测试,适用于WooCommerce版本3 +
所以你的独特&#34;会员编号&#34;将仅针对与目标产品ID或产品类别匹配的订单商品生成。