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):
You can use other WC_Product_Variation or WC_Product methods to get and display the data you want…