如何获取Woocommerce中变体的库存数量

20

我正在为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/>';
    }
?>

这种方法是可行的,但当股票下跌时,我不确定它是否有用。

6个回答

19

给定一个具有多个变体的变量产品,以获取每个变体的库存数量:

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 中想出的最干净的方法,我认为可能有更好的性能方法,但不如这个干净。


3
以下代码将打印出所有具有“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

是的,您的方法是正确的方式来获取变量库存。

只要每次需要使用其库存数量时,您都从数据库中获取新的变量,那么您应该可以使用此方法。

*******更新

我不确定您试图做什么。您只需获取两个变量库存并将它们发送到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

如果其他人想知道如何在购物车中循环项目时执行此操作,只需按照以下示例使用$cart_item['data']->get_stock_quantity()

foreach(WC()->cart->get_cart() as $cart_item_key => $cart_item) {
  $stock = $cart_item['data']->get_stock_quantity();
}

1
add_action('woocommerce_before_add_to_cart_button','get_selected_variation_stock');
function get_selected_variation_stock(){
    global $product;
if ($product->is_type('variable')) { $available_variations = $product->get_available_variations(); foreach($available_variations as $key => $value) { $variation_id = $value ['variation_id']; $attribute_pa_colour = $value ['attributes'] ['attribute_pa_colour']; $variation_obj = new WC_Product_variation($variation_id); $stock = $variation_obj->get_stock_quantity();
echo $attribute_pa_colour。:“。”。$stock。“”;
} } }

使用此钩子,您必须查找所有变体的库存数量以及其他变体的产品数据Woocommerce。


1

好的,我可以获取数量。但是这并不有用。

使用此功能,我可以编写代码生成不同的句子,每个产品都有一个句子,并在使用jquery选择变量时显示它。

但这不是一个好主意。不够优雅。 我认为应该有类似的东西

$product->get_variation_price()

当选择时,此代码返回变化价格。

但是
$product->get_stock_quantity();

当选择变体时不改变,因为它显示全局库存。
有人能给我一个优雅的解决方案吗?或者不存在吗?
更新
最终我使用了。
$product->get_available_variations()

获取数据。
我生成了带有 CSS 隐藏的 HTML 代码,并在单击变体颜色时显示它。 2022 年 12 月更新 似乎我们在此帖子的新评论中有一个最新答案:https://dev59.com/fV0a5IYBdhLWcg3wRW6V#71503746

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接