I am trying to make it so the coupon field is mandatory on Woocommerce for a product category. I have tried to use the code from this answer but it only works with a set of coupon code. I need it to work with any valid coupon code.
Thank you for any help.
Try the following that will make the coupon field mandatory when a cart item from a specific product category is found:
add_action( 'woocommerce_check_cart_items', 'mandatory_coupon_code' );
function mandatory_coupon_code() {
// Set your product categories in the array (can be term IDs, slugs or names)
$product_categories = array( 'clothing' );
$found = false;
// Loop through cart items to check for the product categories
foreach ( WC()->cart->get_cart() as $cart_item ){
if( has_term( $product_categories, 'product_cat', $cart_item['product_id'] ) ){
$found = true; // cart item from the product category is found
break; // We can stop the loop
}
}
// If not found we exit
if( ! $found ) return; // exit
$applied_coupons = WC()->cart->get_applied_coupons();
// Coupon not applied and product category found
if( is_array($applied_coupons) && sizeof($applied_coupons) == 0 ) {
// Display an error notice preventing checkout
$message = __( 'Please enter a coupon code to be able to checkout.', 'woocommerce' );
wc_add_notice( $message, 'error' );
}
}
Code goes in function.php file of your active child theme (or active theme). Tested and works