2017-08-04 55 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語句,這工作,但擁有多個產品是理想的,因爲我有多個成員類型需要此字符串生成。 –

相關問題