WooCommerce:给指定的产品添加禁止使用优惠券功能

tencent promotion
原创作者: Fengjiajun

WooCommerce:给指定的产品添加禁止使用优惠券功能

我们在woocommerce创建单个优惠券时,可以给优惠券排除某些产品或产品类目,禁止其使用优惠券。
但某些特殊情况下,比如我们的网站加入了联盟营销,某些联盟营销网站会在我们的独立站后台定期自动创建批量优惠券,而我们还想继续实现不让某些产品使用优惠券这个功能,此时我们就需要一个一劳永逸的办法:程序化设置指定的产品,给指定的产品添加禁止使用优惠券功能,也不用在设置优惠券的时候手动排除了:
方法1:

// disable all coupons for certain products
function fjj_exclude_products_for_cart_coupons( $valid, $coupon ) {
    if ( ! $valid ) return false;
    $excluded_ids = array( 245 );//这里指定禁用优惠券的产品ID
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        if ( in_array( $cart_item['product_id'], $excluded_ids ) ) {
            $valid = false;
            break;
        }
    }
    return $valid;
}
add_filter( 'woocommerce_coupon_is_valid', 'fjj_exclude_products_for_cart_coupons', 10, 2 );

方法2:

// product IDs that cannot use coupons
function zero_discount_for_specific_products_with_notice($discount, $discounting_amount, $cart_item, $single, $coupon) {
    $restricted_products = array(11924,11706,9420);//这里指定禁用优惠券的产品ID
    if (in_array($cart_item['product_id'], $restricted_products)) {
        $product = wc_get_product($cart_item['product_id']);
        $product_name = $product ? $product->get_name() : 'This product';
        if (!wc_has_notice("\"{$product_name}\" cannot use coupons.", 'error')) {
            wc_add_notice("\"{$product_name}\" cannot use coupons.", 'error');
        }
        return 0; // Force discount to 0
    }
    return $discount;
}
add_filter('woocommerce_coupon_get_discount_amount', 'zero_discount_for_specific_products_with_notice', 10, 5);

将上述任意一代码添加到网站主题模板目录下的functions.php文件即可