2017-08-04 111 views
1

我有一个生成唯一字符串的函数。这目前正在工作。然而,它是运行在结帐时出售的所有产品。我希望以下函数仅在特定产品处于订单Items中时才运行。在WooCommerce订购项目中筛选特定产品ID

这是我到目前为止有:

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

更新(产品类别)

此功能不是在购物车或结帐工作,但是在提交后,当订单已产生。

我已经改变了你的代码一点点,让这一代的代码只为一个定义的产品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+

所以你唯一的“会员编号”将产生仅适用于与目标产品标识或产品类别配套订单项目。

+0

谢谢Loic,但是我在if语句行上收到语法错误,意外变量(T_VARIABLE)。我用有效的ID替换了阵列中的37和50产品ID –

+0

@NickChappell我已经更新了代码,只用了1个产品ID ...请尝试一下...但是您需要在那里设置您的产品ID ...它应该适合您。 – LoicTheAztec

+0

我删除了额外的)在if语句,这工作,但拥有多个产品是理想的,因为我有多个成员类型需要此字符串生成。 –

相关问题