Get the count of "in stock" product variations for a variable product in Woocommerce Get the count of "in stock" product variations for a variable product in Woocommerce wordpress wordpress

Get the count of "in stock" product variations for a variable product in Woocommerce


To get the "in stock" variations count of a variable product on single product pages you can:

1) Use only php and Woocommerce WC_Product methods:

global $product;$count_in_stock = 0;if ( $product->is_type( 'variable' ) ) {    $variation_ids = $product->get_children(); // Get product variation IDs    foreach( $variation_ids as $variation_id ){        $variation = wc_get_product($variation_id);        if( $variation->is_in_stock() )            $count_in_stock++;    }}// Your conditionif( $count_in_stock <= 1 ){   // Do something}

2) Use a SQL query with few php (quick and lighter):

global $wpdb, $product;$product_id = $product->get_id();$count_in_stock = 0;if ( $product->is_type( 'variable' ) ) {    $count = $wpdb->get_col("        SELECT count(p.ID) as in_stock_count FROM {$wpdb->prefix}postmeta as pm        INNER JOIN {$wpdb->prefix}posts as p ON pm.post_id = p.ID        WHERE p.post_type LIKE 'product_variation' AND p.post_parent = $product_id        AND pm.meta_key LIKE '_stock_status' AND pm.meta_value LIKE 'instock'    ");    $count_in_stock = reset($count);}// Your conditionif( $count_in_stock <= 1 ){   // Do something}      

Both codes are tested and work.


This is my Final working code, achieved with the help of LoicTheAztec answer:

add_action( 'woocommerce_before_single_product', 'my_remove_variation_price' );function my_remove_variation_price() {    global $product;    $count_in_stock = 0;    if ( $product->is_type( 'variable' )) {        $variation_ids = $product->get_children(); // Get product variation IDs        foreach( $variation_ids as $variation_id ){            $variation = wc_get_product($variation_id);            if( $variation->is_in_stock() )                $count_in_stock++;        }       }    if( $count_in_stock <= 1 )     {        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price' );    }   }