我有一个生成唯一字符串的函数。这目前正在工作。但是,它适用于结账时出售的所有产品。我希望以下功能仅在特定产品按项目顺序运行时运行。
这是我到目前为止所拥有的:
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);
}
}
已更新 (针对产品类别(
此功能在购物车或结帐中不起作用,而是在提交后生成订单时起作用。
我已经对您的代码进行了一些更改,以仅允许此生成代码用于定义的产品 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 );
}
}
}
代码进入函数.php活动子主题(或主题(的文件或任何插件文件中。
此代码经过测试,适用于WooCommerce版本3 +
因此,您的唯一"会员编号"将仅为与目标产品 ID 或产品类别匹配的订单项目生成。