We already studied how to set min/max WooCommerce add to cart quantity programmatically. That was an easy one. This time, I want to expand on the topic, and define a “minimum order amount on a per-product basis”.
Which, translated in plain English, would be something along the lines of “set the minimum purchase amount for product XYZ to $50”. And once we do that, I expect that the add to cart quantity does non start from 1 – instead it defaults to “$50 divided by product price”. If product price is $10, I would want to set the minimum add to cart quantity to “5” on the single product and cart pages.
Makes sense? Great – here’s how it’s done.
PHP Snippet: Set Min Add to Cart Quantity for Specific Product Based on Min Amount Purchase @ WooCommerce Single Product & Cart Pages
In the example below, I’m setting a minimum purchase amount for product ID = 123 of $50. This function will need to act on the single product page and cart page. If product ID = 123 price is $9, the $min amount will be: ceil(50/9) = 6
/**
* @snippet Set Min Purchase Amount | WooCommerce Single Product
* @how-to Get CustomizeWoo.com FREE
* @author Rodolfo Melogli
* @testedwith WooCommerce 5
* @community https://businessbloomer.com/club/
*/
// ------------
// 1. Single Product Page
add_filter( 'woocommerce_quantity_input_min', 'bloomer_woocommerce_quantity_min_50_eur', 9999, 2 );
function bloomer_woocommerce_quantity_min_50_eur( $min, $product ) {
if ( is_product() ) {
if ( 123 === $product->get_id() ) {
$min = ceil( 50 / $product->get_price() );
}
}
return $min;
}
// ------------
// 2. Cart Page
add_filter( 'woocommerce_cart_item_quantity', 'bloomer_woocommerce_quantity_min_50_eur_cart', 9999, 3 );
function bloomer_woocommerce_quantity_min_50_eur_cart( $product_quantity, $cart_item_key, $cart_item ) {
$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
$min = 0;
if ( 123 === $_product->get_id() ) {
$min = ceil( 50 / $_product->get_price() );
}
$product_quantity = woocommerce_quantity_input( array(
'input_name' => "cart[{$cart_item_key}][qty]",
'input_value' => $cart_item['quantity'],
'max_value' => $_product->get_max_purchase_quantity(),
'min_value' => $min,
'product_name' => $_product->get_name(),
), $_product, false );
return $product_quantity;
}
Is There a Plugin For That?
If you’d love to code but don’t feel 100% confident with PHP, I decided to look for a reliable plugin that achieves the same result.
In this case, I recommend the WooCommerce Quantity Manager plugin. On top of setting the minimum order value, you can also define add to cart quantity step, min, max, default value for each product and much more.
But in case you hate plugins and wish to code (or wish to try that), then keep reading π
Hi Rodolfo,
The snippet for single product page works perfectly, however the snippet for the cart page doesnt seem to work. Any idea’s?
Works for me on Storefront, 2021 and 2022 themes. Please disable plugins/theme and see if it works
Hi,
I think the ‘Set Min Purchase Amount’ script is exactly the solution I need for a problem I have with one product on my website. However, I have copied and pasted the code into a snippet plugin and changed the product ID, but can’t see anything on the product page (in preview) or the cart when I buy a size below the 50 price point.
Hi Michael is your product a simple one?
Thanks for the snippet. I am interested to add sell some products with increment. Dor example only sell a pack of 4 chairs. Would it be possible to add an extra field on each product backend? If I set 4 then the increment for this product will be 4.
Hi Konstantinos, thanks so much for your comment! Yes, this is definitely possible, but Iβm afraid itβs custom work. If youβd like to get a quote, feel free to contact me here. Thanks a lot for your understanding!
Hi Rodolfo thanks for the snippet. I want to implement this for each product, not for spesific product id. I want all seperate product to be added to chart with its minimum price 200$ .
example: you can add minimum 200$ worth product A to cart and you can add minimum 200$ worth product B but not 100$ A and 100$ B.
Hello Ismail, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!
Shouldn’t this line …
.. instead be …
???
YES! Thanks a million. Snippet revised
Hi Rodolfo.
Thank you for your snippet.
But unfortunately, this snippet is not working on cart page.
can you please revise the code and update?
Thanks
Hi there, works for me. Can you try with a default theme and no other plugins than Woo?
So I guess that you prefer this method over the min-max plugin that is out there, especially if you only need it for a couple of products?
I have the plugin installed and I’m using it. Would my installation work better if I get rid of the plugin and use this snippet instead?
Yes, I guess that’s my idea re: quick and easy snippets vs complex plugins π