Show stock status next to each attribute value in WooCommerce variable products Show stock status next to each attribute value in WooCommerce variable products wordpress wordpress

Show stock status next to each attribute value in WooCommerce variable products


Faster and optimized code version for WooCommerce 3+ only in:
Display variation stock status on single dropdown variable products in Wocommerce 3


Updated WooCommerce compatibility or previous version 2.6.x

You can do it using a custom function hooked in woocommerce_variation_option_name filter hook. This is only viable for products that have a unique attribute for their variations…

Here is the code:

add_filter( 'woocommerce_variation_option_name', 'customizing_variations_terms_name', 10, 1 );function customizing_variations_terms_name( $term_name ){    if(is_admin())        return $term_name;    global $product;    $second_loop_stoped = false;    // Get available product variations    $product_variations = $product->get_available_variations();    // Iterating through each available product variation    foreach($product_variations as $variation){        $variation_id = $variation['variation_id'];        $variation_obj = new WC_Product_Variation( $variation_id );        ## WOOCOMMERCE RETRO COMPATIBILITY ##        if ( version_compare( WC_VERSION, '3.0', '<' ) ) # BEFORE Version 3 (older)        {            $stock_status = $variation_obj->stock_status;            $stock_qty = intval($variation_obj->stock);            // The attributes WC slug key and slug value for this variation            $attributes_arr = $variation_obj->get_variation_attributes();        }        else # For newest verions: 3.0+ (and Up)        {            $stock_status = $variation_obj->get_stock_status();            $stock_qty = $variation_obj->get_stock_quantity();            // The attributes taxonomy key and slug value for this variation            $attributes_arr = $variation_obj->get_attributes();        }        if(count($attributes_arr) != 1) // Works only for 1 attribute set in the product            return $term_name;        // Get the terms for this attribute        foreach( $attributes_arr as $attr_key => $term_slug){            // Get the attribute taxonomy            $term_key = str_replace('attribute_', '', $attr_key );            // get the corresponding term object            $term_obj = get_term_by( 'slug', $term_slug, $term_key );            if( $term_obj->name == $term_name ){ // If the term name matches we stop the loops                $second_loop_stoped = true;                break;            }        }        if($second_loop_stoped)            break;    }    if( $stock_qty>0 )        return $term_name .= ' - ' . $stock_status . ' ('.$stock_qty.')';    else        return $term_name .= ' - ' . $stock_status;}

Code goes in function.php file of your active child theme (or theme) or also in any plugin file.

This code works and is tested in WooCommerce 2.6.x and 3+.


You will get this (for example):

enter image description here

You can use other WC_Product_Variation or WC_Product methods to get and display the data you want…