2017-07-12 7 views
2

カート内の製品の在庫状況に基づいてカート内の推定納期を出力しようとしています。WooCommerceカート商品在庫に基づいて納期の予定範囲を表示

私はもう少し成功しましたが、今は固まっています。

これまでに書いたのはこれです。それは今、私は推定日を追加しようとしていますが、ここで私はここでは、日付の出力を定義する必要が

function lieferzeit() { 

    global $woocommerce; 
     $cart_items = $woocommerce->cart->get_cart(); 
     foreach ($cart_items as $variation) { 
      $variation_id = $variation['variation_id']; 
     $variation_obj = new WC_Product_variation($variation_id); 
     $stock = $variation_obj->get_stock_quantity(); 
     } 

     for ($i=0; $i < count($stock) ; $i++) { 
      echo "Voraussichtliche Lieferung Date! "; 


     } 
} 

add_filter ('woocommerce_cart_collaterals', 'lieferzeit'); 

こだわっていますfunction.phpに

function lieferzeit() { 

    global $woocommerce; 
     $cart_items = $woocommerce->cart->get_cart(); 
     foreach ($cart_items as $variation) { 
      $variation_id = $variation['variation_id']; 
     $variation_obj = new WC_Product_variation($variation_id); 
     $stock = $variation_obj->get_stock_quantity(); 
     } 
echo $stock; //outputs the in stock amount successfully 

} 


add_filter ('woocommerce_cart_collaterals', 'lieferzeit'); 

を行きます。今日の+1日から今日+4日まで。しかし、私はそれをどのように管理するか考えていません。 最高の出力は次の形式になります。

配送予定金金額14.7 - 水19.7

for ($i=0; $i < count($stock) ; $i++) { 

に行くための正しい方法であれば私もSHUREておりません。

私は2種類の製品を持っていますが、1〜4日以内に発送可能で、もう1回は14〜21日以内に発送可能です。今は2番目の問題です。両方のタイプがカート内にある場合は、より高い出荷時間を選択する必要があります。

アイデアはありますか?


更新:

コードは、カート内の各アイテムの在庫数を確認してください。 すべての品目の在庫数が0より大きい場合は、出荷予定日を1〜4営業日の日付として返す必要があります。

在庫数が0以下のカートに1つのアイテムがある場合は、日付として14 - 21営業日の見積もり出荷時間をエコーする必要があります。カート内の他のすべての商品の在庫数が0より大きい場合でも、

金曜日までの営業日は月曜日までです。コードが休日を認識する場合は非常にきれいです。クリスマス、新年など。LoicTheAztecからソリューションは完璧に動作し

おかげ

。今私はそれにいくつかのオプションを追加しようとしました。

function lieferzeit()の出力が管理者の注文の詳細ページに表示されるといいでしょう。サイドバーにカスタム管理パネルを作成するに 私は、これは、これまで作品とOrder [カスタム]タブは管理者ページにあり

add_action('add_meta_boxes', 'add_meta_boxes'); 
function add_meta_boxes() 
{ 
    add_meta_box( 
     'woocommerce-order-my-custom', 
     __('Order Custom'), 
     'order_my_custom', 
     'shop_order', 
     'side', 
     'default' 
    ); 
} 

function order_my_custom() 
{ 
    echo $lieferzeit; 
} 

from this post

を見つけました。今私はfunction lieferzeit()の出力を変数に格納しようとしました。

$from = str_replace($days_en, $days_ge, $from); 
$to = str_replace($days_en, $days_ge, $to); 

$lieferzeit = array($from, $to); 

しかし、function add_meta_boxes()function order_my_custom() doen'tは変数$lieferzeitの何も知らないようです。

function lieferzeit()の出力を保存して呼び出す別の方法はありますか?

+0

動作します。 Stackoverflowは少し混沌としています:) 私は単体製品と可変製品の両方を使用しています。しかし、あなたのソリューションは両方のタイプで非常にうまく機能しています! – Max

+0

**シンプルで変動のある製品在庫に関して、私のコード**を更新しました。** **すぐに使えるはずです。* ... *在庫ステータス 'if($ product_obj-> get_stock_status()== 'instock'){あなたが助けてくれてありがとうございます! – LoicTheAztec

答えて

2

アップデート3(単純や変数製品の取り扱い|翻訳機能を追加しました)

次のコード、カート内の各アイテムの在庫数をチェックします。

1)すべてのカートアイテムが「在庫あり」の場合、日付として示された1〜4営業日の推定出荷時間をエコーし​​ます。

2)1つのカートアイテムが「在庫切れ」の場合、日付として与えられた14〜21営業日の推定出荷時間をエコーし​​ます。

しかし、私はここで休日

を認識しませんがそのコードです:

add_filter ('woocommerce_cart_collaterals', 'lieferzeit'); 
function lieferzeit() { 

    $all_items_in_stock = true; // initializing 

    // Iterating through cart items (to get the stock info) 
    foreach (WC()->cart->get_cart() as $cart_item) { 

     # HANDLING SIMPLE AND VARIABLE PRODUCTS 

     // Variable products 
     $variation_id = $cart_item['variation_id']; 
     if(0 != $variation_id) { 
      $variation_obj = new WC_Product_variation($variation_id); 
      $stock = $variation_obj->get_stock_quantity(); 
     } else { 
      // Simple products 
      $product_id = $cart_item['product_id']; 
      $product_obj = new WC_Product($product_id); 
      $stock = $product_obj->get_stock_quantity(); 
     } 

     if($stock <= 0){ 
      // if an item is out of stock 
      $all_items_in_stock = false; 
      break; // We break the loop 
     } 
    } 

    // Items "in stock" (1 to 4 week days) 
    if($all_items_in_stock){ 
     for($start=0, $count=-1 ; $count < 4; $start++){ 
      $weekdays = date('w', strtotime("+$start days")); 
      if($weekdays > 0 && $weekdays < 6){ 
       $count++; 
      echo date('D j (w)', strtotime("+$start days")).', '; 
       if($count == 1){ 
        $from = date('D. j/n', strtotime("+$start days")); 
       } elseif($count == 4) { 
        $to = date('D. j/n', strtotime("+$start days")); 
       } 
      } 
     } 
    } else { // 1 is Items Out of stock (14 to 21 week days) 
     for($start=0, $count=-1 ; $count < 21; $start++){ 
      $weekdays = date('w', strtotime("+$start days")); 
      if($weekdays > 0 && $weekdays < 6){ 
       $count++; 
       if($count == 14){ 
        $from = date('D. j/n', strtotime("+$start days")); 
       } elseif($count == 21) { 
        $to = date('D. j/n', strtotime("+$start days")); 
       } 
      } 
     } 
    } 
    ## TRANSLATION ## 

    // DAYS IN ENGLISH (Source) 
    $days_en = array('Mon','Tue','Wed','Thu','Fri'); 

    // TRANSLATE the DAYS in GERMAN (replacement) 
    $days_ge = array('Mmm','Ttt','Www','Thh','Fff'); 

    $from = str_replace($days_en, $days_ge, $from); 
    $to = str_replace($days_en, $days_ge, $to); 

    ## OUTPUT ## 

    echo "<br><br>Estimated shipping $from - $to"; 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルまたはまた、任意のプラグインに行きますファイル。

このコードは、テストされ、私はまだ製品に関するご質問を見てきました

+0

こんにちはLoicTheAztec、 ありがとうございました!それは信じられないほどです。私はあなたの助けなしにこれに費やした日数は何年かわかりません。 私はそれがそうであると思ったより複雑に思われる唯一のことは、ドイツ語で出力を得ることです。 私は ''( 'D、j.n.'、strtotime( "+ $ start days")) 'たくさんの形式が好きです。しかし、 'setlocale(LC_TIME、" de_DE ");の単純な追加はうまくいきません。すべてのstrtotimeをstrftimeに置き換えてもうまくいきません。 dateformatを '%a、%d。%m 'に変更しても – Max

+0

私は今発見したことがあります。私はそれが単一の製品で動作すると思った。単一の製品が在庫切れの場合にのみ実行されます。在庫があり、納期が短い単一の製品については、長い納品時間しか示されません。 これを最初に追加しようとしましたが、助けになりませんでした。 '$ simple_id = $ cart_item ['simple_id']; $ simple_obj = new WC_Product_simple($ simple_id); $ stock_imple = $ simple_obj-> get_stock_quantity(); ' そして、私はフェローを追加しました。 '($ variation_obj-> get_stock_quantity()<= 0 xor $ simple_obj-> get_stock_quantity()<= 0){' – Max

+0

これで完璧に動作します!私は少し変更を加えたので、在庫量が0より小さい製品も条件に入っています。 'if(0 == $ stock)'から 'if($ stock <= 0)'に変更されました。 – Max

関連する問題