2017-12-11 48 views
2
wooocommerceで

異なる在庫番号の異なるテキストを表示するために、「在庫あり」テキストを変更しました。したがって、3より上の在庫番号の場合、それはsaisである: " 在庫"(cssで緑色)、在庫番号3またはそれ以下では "2だけ残っている"(cssで赤色)と表示されます。アマゾンのように。WooCommerceで製品バリエーションの在庫数量が表示されない

あなたがここに見ることができるので、これは簡単な製品と完璧に動作します:https://edelmix.de/superdry-urban-blau-limette-quarzuhr-syg164un/

をしかし、変数の製品に私のコードは、所望の結果を持っていません。もちろん、バリエーションの適切な在庫量で上記のテキストと同じテキストを表示します。

私が得るのは、すべてのバリエーションの合計数を含むテキストです。私はすべてのバリエーションについてバックエンドの製品レベルで製品数量を管理し、そのバリエーションに対して異なる在庫量を持っていました。今のような可変積上

結果はここで見ることができます: https://stage.edelmix.de/buddha-to-buddha-blue-lace-agate-ring-603ba/

示す量は、(あなたがドロップダウンからバリエーションを選択した後)5です。すべてのバリエーションの総量はすべて一緒になります。異なるリングサイズの在庫数は1/3/1です(私のテストでは、価格の横にある在庫変数が表示されています)、これはそれぞれのバリエーションが選択されたときに表示したいものですシンプルな製品と同じようにカスタムテキスト)。

マイコードは、これまでのところです:

add_filter('woocommerce_get_availability', 'custom_get_availability', 1, 2); 

function custom_get_availability($availability, $_product) { 
    global $woocommerce, $product; 
    if ($_product->is_type('variable')) { 
     $available_variations = $product->get_available_variations(); 
     foreach ($available_variations as $variation) 
      { 
       $variation_id = $variation['variation_id']; 
       $variation_obj = new WC_Product_Variation($variation_id); 
       $stock = $variation_obj->get_stock_quantity(); 
       echo $stock; // <-- for testing purpose to see if I do get the individual variation-quantities = works!! 
      } 
     } else { 
      $stock = $product->get_stock_quantity(); 
     } 

    // change text "In Stock' to 'Auf Lager' when quantity more than 3 
    if ($_product->is_in_stock() && $stock > 3) $availability['availability'] = $stock . ' ' .__('auf Lager', 'woocommerce'); 

    // change text to n Left, where n is the quantity 
    if ($_product->is_in_stock() && ($stock <= 3)) $availability['availability'] = '<p class="stock ed_low_stock ' . esc_attr($availability['class']) . '">' . __('Nur noch ' . $stock . ' auf Lager!', 'woocommerce') . '</p>'; 

    // change text "Out of Stock' to 'SOLD OUT' 
    if (!$_product->is_in_stock()) $availability['availability'] = __('zzt. nicht verfügbar!', 'woocommerce'); 

    // change text "In Stock' to 'Special Order' for products with unmanaged stock 
    if (!$_product->managing_stock() && $_product->is_in_stock()) $availability['availability'] = __('Auf Lager', 'woocommerce'); 

    return $availability; 
} 

はなぜこの仕事をしますか?

私は最後の時間にすべてを試しましたが、なぜこれがうまくいかないのかわかりません。

ご迷惑をおかけして申し訳ありません。

+0

作業まあ、それは、部分的に正しいですが、私の質問に答えていません。 – Visualpro

+0

申し訳ありません...あなたのコードをチェックしてテストしました。私は何が間違っていたかを見つけました... 下記の答えを見てください。 – LoicTheAztec

答えて

0

メイドの合併症がないために機能しませんでした。フックされた関数では、$productという引数が、現在選択されている変数(変数製品内)であるため、Variable製品からバリアントを取得するためにforeachループは必要ありません。

コードがコンパクトになります。代わりにこれを試してみてください:

add_filter('woocommerce_get_availability', 'custom_get_availability', 1, 2); 
function custom_get_availability($availability, $_product) { 
    $stock = $_product->get_stock_quantity(); 

    // change text "In Stock' to 'Auf Lager' when quantity more than 3 
    if ($_product->is_in_stock() && $stock > 3) $availability['availability'] = $stock . ' ' .__('auf Lager', 'woocommerce'); 

    // change text to n Left, where n is the quantity 
    if ($_product->is_in_stock() && $stock <= 3) $availability['availability'] = '<p class="stock ed_low_stock ' . esc_attr($availability['class']) . '">' . __('Nur noch ' . $stock . ' auf Lager!', 'woocommerce') . '</p>'; 

    // change text "Out of Stock' to 'SOLD OUT' 
    if (! $_product->is_in_stock()) $availability['availability'] = __('zzt. nicht verfügbar!', 'woocommerce'); 

    // change text "In Stock' to 'Special Order' for products with unmanaged stock 
    if (! $_product->managing_stock() && $_product->is_in_stock()) $availability['availability'] = __('Auf Lager', 'woocommerce'); 

    return $availability; 
} 

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

テスト済み

+0

ありがとう、Loic。それは部分的に問題を解決しました。私はあなたが最初に与えたのとまったく同じコードを持っていました。しかし、それは動作しませんでした。だから私はそれをもっと複雑にしたものに変えて解決しようとしました。 コードを変更しました。 $ productの代わりに、私は$ _productを使用します。それは私に望ましい結果をもたらしました。私は$ productと$ _productの違いが何であるか正確には分かりません。たぶんあなたは差別化でいくつかの光を流すことができますか? – Visualpro

+0

私はすでにupvotedですが(私の投票は表示されません。そして今もそれに印をつけた。ありがとうございました – Visualpro

関連する問題