WooCommerce: Variable Item "Combined" Stock Amount

 

WooCommerce: Variable Item "Combined" Stock Amount
WooCommerce: Variable Item "Combined" Stock Amount


When a variable product stock quantity is managed at variation level, the stock status is either “In stock” or “Out of stock” without any mention of the quantity.

It would be cool, however, and in certain cases only, to show the total stock quantity for all single variations. If variation Red has 3 in stock, variation Blue has 7 in stock and variation Cyan has 10 in stock, I’d like to set the “parent product” stock quantity to 3 + 7 + 10 = 20.

So, how do we do that?


PHP Snippet: Variable Product Stock Quantity = Sum of All Single Variations’ Stock Quantity

/**
 * @snippet       Cumulative Stock Quantity @ Variable Product
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 8
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */
 
// CALCULATE CUMULATIVE STOCK
 
function bbloomer_cumulative_stock_variations( $product ) {
    if ( $product->get_type() == 'variable' && ! $product->get_manage_stock() ) {
      $cumulative_stock = 0;
        foreach ( $product->get_available_variations() as $key ) {
            $variation = wc_get_product( $key['variation_id'] );
            $cumulative_stock += $variation->get_stock_quantity() ? $variation->get_stock_quantity() : 0;
        }
    }
   return $cumulative_stock;
}
 
// SET VARIABLE PRODUCT STOCK QUANTITY
 
add_filter( 'woocommerce_get_stock_html', 'bbloomer_variable_product_cumulative_stock', 9999, 2 );
 
function bbloomer_variable_product_cumulative_stock( $html, $product ) {
   $availability = $product->get_availability();
   if ( $product->get_type() == 'variable' && empty( $availability['availability'] ) ) {
      ob_start();
      wc_get_template(
         'single-product/stock.php',
         array(
            'product' => $product,
            'class' => bbloomer_cumulative_stock_variations( $product ) > 0 ? 'in-stock' : 'out-of-stock',
            'availability' => sprintf( __( '%s in stock', 'woocommerce' ), bbloomer_cumulative_stock_variations( $product ) ),
         )
      );
      return ob_get_clean();
   }
   return $html;
}
 
// SHOW STOCK @ SINGLE VARIABLE PRODUCT PAGE
 
add_action( 'woocommerce_before_add_to_cart_form', 'bbloomer_stock_for_variable_products' );
 
function bbloomer_stock_for_variable_products() {
   global $product;
   $availability = $product->get_availability();
   if ( $product->get_type() == 'variable' && empty( $availability['availability'] ) ) {
      echo wc_get_stock_html( $product );
   }
}

Where to add custom code?

Post a Comment

Previous Post Next Post

POST ADS1

POST ADS 2