2017-08-04 34 views
1

私は一意の文字列を生成する関数を持っています。これは現在動作しています。しかし、それはチェックアウト時に販売されているすべての製品のために実行されています。特定の商品が注文商品に含まれている場合にのみ、以下の機能を実行したいと思います。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ファイル、またはプラグインファイル内の。

このコードは、テストされ、だからあなたのユニークな「会員数」が唯一の目標とプロダクトIDまたは製品カテゴリで一致しているためのアイテムのために生成されますWooCommerceバージョン3+

のために動作します。

+0

ありがとう、私は構文エラー、予期せぬ変数(T_VARIABLE)if文の行を受け取りました。私は有効なIDの –

+0

@NickChappellと配列内の37と50の製品IDを置き換えました。代わりに1つの製品IDでコードを更新しました...試してください...しかし、あなたの製品IDを設定する必要があります...それはあなたのために働く必要があります。 – LoicTheAztec

+0

if文で余分な部分を削除しましたが、これはうまくいきましたが、この文字列を生成する必要のある複数のメンバーシップタイプがあるので、複数の製品を持つのが理想的です。 –

関連する問題