web-dev-qa-db-ja.com

バリエーションの在庫量を取得する方法

wordpressおよびwoocommerceのテーマを開発しています。

バリエーションの在庫を見せてください。

<p class="stock-m13"><?php echo $product->get_stock_quantity(); ?></p>

(ここ: woocommerceから商品の在庫数を取得する方法は? )しかし、このコードは、各バリエーション数量ではなく、グローバル在庫数量のみを表示します。

変動量を取得するために別の関数が必要ですか?または、コードが完成していない可能性があります(私はTwenty Fifteenテーマを使用し、バリエーション量が示されているためだと思います)?

私はこれで最大数量を取得しようとします:

<?php
    foreach ($product->get_available_variations() as $key) {
        echo $key['max_qty'] .'<br/>';
    }
?>

そして、私はそれを手に入れましたが、在庫が下がったときにこれが役立つかどうかわかりません。

12
SeiyaJapon

わかりました、これで私は量を取ることができます。しかし、役に立ちません。

これにより、製品ごとに異なるセンテンスを作成するコードを準備し、jqueryを使用してバリエーションが選択されたときにそれを示すことができます。

しかし、これは良い考えではありません。エレガントではありません。私はのようなものが存在していたにもかかわらず

$product->get_variation_price()

選択すると、このコードはバリエーション価格を返します。だが

$product->get_stock_quantity();

グローバル在庫を表示するため、バリエーションを選択しても変更されません。

誰かが私にエレガントな解決策を与えることができますか?または存在しませんか?

[〜#〜]更新[〜#〜]

最後に私は使用しました

$product->get_available_variations()

データを取得します。

これでcssで隠されたhtmlコードを生成しました。バリエーションの色をクリックすると表示されます。

1
SeiyaJapon

各バリエーションの在庫数を取得するために、複数のバリエーションを持つ変数製品を考えます。

function get_stock_variations_from_product(){
    global $product;
    $variations = $product->get_available_variations();
    foreach($variations as $variation){
         $variation_id = $variation['variation_id'];
         $variation_obj = new WC_Product_variation($variation_id);
         $stock = $variation_obj->get_stock_quantity();
    }
}

これは、WC 2.5で私が考え出した最もクリーンな方法です。パフォーマンスの点ではより良い方法があるかもしれませんが、それほどクリーンではありません。

6
db306

以下のコードは、 'is_in_stock'変数を持つすべての属性を出力します。

<?php
    global $product;
    $product_variations = $product->get_available_variations();

    foreach ($product_variations as $variation)  {
        $var_data = $variation['attributes'];
        $var_data['in_stock'] = $variation['is_in_stock'];
    }

    //List all attributes with stock available or not array..
    echo '<pre>';
    print_r($var_data);
    echo '</pre>';
    die;
?>
2
Faisal Alvi

はい、あなたの方法は、バリエーションの在庫をつかむ正しい方法です。

在庫数を使用する必要があるたびにデータベースから新しいバリエーションを取得している限り、この方法を使用しても問題ありません。

*******更新済み

何をしようとしているのかよくわかりません。両方のバリエーションの在庫を取得し、jqueryに送信して遊ぶことができるはずです。

$product_variable = new WC_Product_Variable($product->id);
$product_variations = $product_variable->get_available_variations();

foreach ($product_variations as $variation)  {
  $stock[$variation['attribute_pa_variation-name']] = $variation['max_qty'];
}

ここでは、attribute_pa_ "your-attribute-name"をキーとして連想配列に在庫レベルを割り当てています。

これで、配列をjQueryに送信できます。

私がその質問を誤解しているかどうかを明確にしてください。

2
Tuesdave