WooCommerce coupon settings allow you to define allowed products (or product categories). What’s missing, however, is the other way around: how to set up a product so that it can never be discounted?
Thankfully, a handy WooCommerce filter comes to the rescue (“woocommerce_coupon_is_valid_for_product“) and we can therefore make all coupons “invalid” when a given product is in the cart. Enjoy!

PHP Snippet: Disable All Coupons for a Single Product ID @ WooCommerce Cart / Checkout Page
/**
* @snippet Exclude Product From All Coupons - WooCommerce
* @how-to businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @compatible WooCommerce 5.1
* @community https://businessbloomer.com/club/
*/
add_filter( 'woocommerce_coupon_is_valid_for_product', 'bbloomer_exclude_product_from_product_promotions_frontend', 9999, 4 );
function bbloomer_exclude_product_from_product_promotions_frontend( $valid, $product, $coupon, $values ) {
// PRODUCT ID HERE (E.G. 12345)
if ( 12345 == $product->get_id() ) {
$valid = false;
}
return $valid;
}
Great post! This guide on excluding products from discounts is super helpful. Thanks for sharing!
You’re welcome!
Hi Rodolfo,
First of all thank you for the useful snippet!
Unfortunately, it does not seem to work for “Fixed cart discount” coupons (which most of my hundreds of coupons are).
I made several attempts on the product that I want to exclude (a variable product, for which I targeted the ID of the specific variation I want to exclude), and it is excluded correctly if I apply a “Percentage discount” or “Fixed product discount”, but not if I apply a “Fixed cart discount”.
Do you have any suggestions on how to make it work for all coupon types?
Thank you in advance for your help.
Thank you Aron! I think you should use the “woocommerce_coupon_is_valid_for_cart” hook instead, and do some similar checks there. Hope this helps
Hey!
Can this be used for a whole category? If so, are you able to provide the edit for this? (Apologies for the noob question!)
Thanks
Hi Hassan 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,
This code didn’t work.
Woocommerce version: 4.5.3
Php version: 7.4.24
Any changes to make ?
Hi Sai, did you test with a different theme and no other plugins but Woo?
Isn’t working.
After implementing the code, no coupon is accepted.
Even if the product in question is not in the shopping cart.
The version shown above and my version ALWAYS indicate that no voucher can be accepted.
I suspect the filter has changed.
Works for me. Before testing, did you completely empty the cart and cleared customer sessions? Let me know
Hi Rodolfo
Super snippet – Always had to remember to exclude some speciel products -So this is very helpfull Thx
What if I have 3 products that I always want to exclude? Can you show how? is it “just” id seperated with komma, or do I need an array?
Happy Easter and posting
Peter
Cool. You should use the in_array() PHP function
Re: Peters’ question. How should the array function look like in this case then exactly? Appreciate the help. Thanks
if ( in_array(123,578) == $product->get_id() )
?