特定 Woocommerce 产品类别项目的强制优惠券代码

Mandatory Coupon code for specific Woocommerce product category items

在 Woocommerce 中,我试图对特定类别的所有产品强制使用优惠券代码。

以下代码(放置在 functions.php 中)效果很好,但无论产品类别如何,所有产品都必须使用优惠券代码:

add_action('woocommerce_check_cart_items', 'make_coupon_code');

function make_coupon_code()
{
    global $woocommerce;
    if(is_cart() || is_checkout()){
        $my_coupon = $woocommerce->cart->applied_coupons;
        echo $woocommerce->cart->get_applied_coupons;
        if(empty($my_coupon))
        {
            wc_add_notice( '<strong>' . $btn['label'] . '</strong> ' . __( 'insert coupon code', 'woocommerce' ), 'error' );
        }
    }
}

有什么想法吗?

(我要定位的产品类别是 'chef-masterclass')

已更新:下面的代码将阻止结帐需要为特定产品类别应用的强制性优惠券代码:

add_action( 'woocommerce_check_cart_items', 'mandatory_coupon_code' );
function mandatory_coupon_code() {
    // HERE below -- Your settings
    $mandatory_coupon   = 'summer'; // <== Coupon code
    $product_categories = array( 'chef-masterclass' ); // <== Product category (Id, slug or name)

    $applied_coupons = WC()->cart->get_applied_coupons();

    // If coupon is found we exit
    if( in_array( $mandatory_coupon, $applied_coupons ) ) return;

    $found = false;

    // Loop through cart items to check for the product category
    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
        }
    }

    // Coupon not applied and product category found
    if( $found ){
        // Display an error notice preventing checkout
        $coupon_html = '<strong>"' . ucfirst( $mandatory_coupon ) . '"</strong>';
        $message = sprintf( __( 'Please enter the coupon code %s to checkout.', 'woocommerce' ), $coupon_html );
        wc_add_notice( $message, 'error' );
    }
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效