How can I fetch if in_stock?
-
Hi,
On my website I am adding a free product to the cart if items are above a certain amount. Here is my code:
add_action( 'woocommerce_before_calculate_totals', 'add_free_product_to_cart' ); function add_free_product_to_cart( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; $free_product_id = 39568 ; // <= Set the free product id to add $min_subtotal = 40; // <= Set the minimum cart subtotal required $has_shippable = $free_key = false; // Initializing $cart_subtotal = 0; // Loop through cart items (first loop) foreach ( $cart->get_cart() as $cart_item_key => $cart_item ){ // Check if free product is in cart if ( $free_product_id == $cart_item['product_id'] ) { $free_key = $cart_item_key; $free_qty = $cart_item['quantity']; $cart_item['data']->set_price(0); // Optional: Set free product price to zero } // Check for non virtual products if ( $cart_item['data']->is_virtual() !== true ) { $has_shippable = true; } // Calculate items subtotal: Add discounted Line total with taxes $cart_subtotal += $cart_item['line_total'] + $cart_item['line_tax']; } // Add Free product if ( $cart_subtotal >= $min_subtotal && $has_shippable && $free_key === false ) { $cart->add_to_cart( $free_product_id, 1 ); } // Remove free product elseif ( ( $cart_subtotal < $min_subtotal ) && $free_key !== false ) { $cart->remove_cart_item( $free_key ); } // Adjust free product quantity to 1 elseif ( $free_key !== false && $free_qty > 1 ) { $cart->set_quantity( $free_key, 1 ); } } // Optional: Display free product price to zero on minicart add_filter( 'woocommerce_cart_item_price', 'change_minicart_free_gifted_item_price', 10, 3 ); function change_minicart_free_gifted_item_price( $price_html, $cart_item, $cart_item_key ) { $free_product_id = 39568; if( $cart_item['product_id'] == $free_product_id ) { return wc_price( 0 ); } return $price_html; }
It works fine, however it does not have breaker for if the item is not in stock. Recently I’ve been running out of the free item and it doesn’t allow someone to go through the checkout. Ive tried to add this before first if clause:
global $product; $stock = $product->get_stock_quantity(); if ( $_product->is_in_stock()
but it keeps giving me an error. I am a novice with coding so if someone could help me out that would be great! I just essentially don’t want the free product to add to cart if stock is 0.
Thanks,
OtisThe page I need help with: [log in to see the link]
Viewing 3 replies - 1 through 3 (of 3 total)
Viewing 3 replies - 1 through 3 (of 3 total)
- The topic ‘How can I fetch if in_stock?’ is closed to new replies.