Skip to content
Advertisement

Exclude variations with 2 specific attribute terms from coupon usage in Woocommerce

I need to prevent coupons being used if customer have any specific product variations in their cart with following attribute terms:

  • attribute_pa_style => swirly
  • attribute_pa_style => circle

I’ve looked through the Woocommerce scripts that apply to restricting specific products and specific categories, but can’t figure it out with regard to attributes and all coupons.

Any help is appreciated.

Advertisement

Answer

This can be done using woocommerce_coupon_is_valid filter hook this way:

add_filter( 'woocommerce_coupon_is_valid', 'check_if_coupons_are_valid', 10, 3 );
function check_if_coupons_are_valid( $is_valid, $coupon, $discount ){
    // YOUR ATTRIBUTE SETTINGS BELOW:
    $taxonomy   = 'pa_style';
    $term_slugs = array('swirly', 'circle');

    // Loop through cart items and check for backordered items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        foreach( $cart_item['variation'] as $attribute => $term_slug ) {
            if( $attribute === 'attribute_'.$taxonomy && in_array( $term_slug, $term_slugs ) ) {
                $is_valid = false; // attribute found, coupons are not valid
                break; // Stop and exit from the loop
            }
        }
    }
    return $is_valid;
}

Code goes in function.php file of your active child theme (or active theme). Tested and works.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement