How get variation's stock quantity woocommerce
Asked Answered
M

6

20

I'm developing a theme for wordpress and woocommerce and need to show a variation's stock.

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

I read How to get the stock quantity of an article from woocommerce?, but this code only show me the global stock quantity, not each variation quantity.

Do I need another function to get variation quantity? Or it is possible that my code is not completed (I think it because I have used Twenty Fifteen theme and variation quantity is showed)?

I tried to get the max quantity with this:

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

And that works, but I don't know if this is useful when the stock goes down.

Maccaboy answered 28/5, 2015 at 18:38 Comment(0)
M
1

Ok, with this I can take the quantity. But is not useful.

With this I can prepare a code that make differents sentences, one for each product, and show it when a variation would be selected using jquery.

But this is not good idea. Is not elegant. I though existed something like

$product->get_variation_price()

This code return the variation price when is selected. But

$product->get_stock_quantity();

not change when variation is selected because show me the global stock.

Can somebody give me an elegant solution? Or not exists?

UPDATE

Finally I used

$product->get_available_variations()

To get the data.

With this I've generated html code, hidden with css, and I show it when I click on variation's color.

UPDATE December 2022

Seems that we have a most current answer on a new comment on this post: https://mcmap.net/q/620765/-how-get-variation-39-s-stock-quantity-woocommerce

Maccaboy answered 29/5, 2015 at 10:40 Comment(0)
A
19

Given a variable product with multiple variations in order to get each variation stock quantity:

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();
    }
}

This is the cleanest way I figured out for WC 2.5, I think there might be better ways in terms of performance but not as clean.

Atp answered 5/3, 2016 at 16:50 Comment(0)
M
3

The below code will print all attributes with 'is_in_stock' variable.

<?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;
?>
Manes answered 8/10, 2016 at 7:32 Comment(0)
C
2

Yes, your way is the correct way to grab a variation's stock.

As long as you are getting the variations fresh from the database every time you need to use its stock quantity then you should be okay with using this method.

*******UPDATEED

I'm not sure I understand what you're trying to do. You should just be able to grab both variation stock and send them over to jquery to play with.

$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'];
}

Here I'm assigning stock level to an associative array with attribute_pa_"your-attribute-name" as the key

Now I can send my array over to jQuery.

Please clarify if I'm mis-understanding the question.

Charnel answered 28/5, 2015 at 20:4 Comment(0)
G
2

If anyone else is wondering how to do this when looping through items in a cart, it's just $cart_item['data']->get_stock_quantity() under the following example:

foreach(WC()->cart->get_cart() as $cart_item_key => $cart_item) {
  $stock = $cart_item['data']->get_stock_quantity();
}
Gynecologist answered 16/3, 2022 at 20:18 Comment(0)
M
1

Ok, with this I can take the quantity. But is not useful.

With this I can prepare a code that make differents sentences, one for each product, and show it when a variation would be selected using jquery.

But this is not good idea. Is not elegant. I though existed something like

$product->get_variation_price()

This code return the variation price when is selected. But

$product->get_stock_quantity();

not change when variation is selected because show me the global stock.

Can somebody give me an elegant solution? Or not exists?

UPDATE

Finally I used

$product->get_available_variations()

To get the data.

With this I've generated html code, hidden with css, and I show it when I click on variation's color.

UPDATE December 2022

Seems that we have a most current answer on a new comment on this post: https://mcmap.net/q/620765/-how-get-variation-39-s-stock-quantity-woocommerce

Maccaboy answered 29/5, 2015 at 10:40 Comment(0)
Y
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 . " ";

        }
    }

By using this hook, you have to find out all variation's stock quantity as well as other variation's product data woocommerce.

Yacht answered 1/7, 2020 at 15:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.