禁用WooCommerce中订阅产品的优惠券

时间:2020-10-06 16:44:11

标签: php wordpress woocommerce coupon woocommerce-subscriptions

我正在尝试禁用通过“所有要订阅的产品”附加项设置的WooCommerce订阅的优惠券代码。我尝试了下面的代码段,但它的目标不是通过“用于订阅的所有产品”插件添加的订阅产品。我可能完全走错了方向。

我有一个测试产品here

下面是我的代码尝试:


function sw_wc_apfs_disable_on_susbcription( $is_valid, $product, $instance, $values ) {

if ( ! empty( $values[ ‘wcsatt_data’][ ‘active_subscription_scheme’ ] ) ) {
$is_valid = false;
}

return $is_valid;
}

这行不通……不胜感激。

1 个答案:

答案 0 :(得分:3)

由于缺少钩子,因此您的代码有点不完整。代码中也有一些错误。

只有3个自变量woocommerce_coupon_is_valid挂钩,因此您需要遍历购物车项目。

以下是2个代码版本:

1)。对于使用“所有要订阅的产品” 的订阅产品,请在上加上(注释代码)

add_filter( 'woocommerce_coupon_is_valid', 'disable_coupons_for_subscription_products', 10, 3 );
function disable_coupons_for_subscription_products( $is_valid, $coupon, $discount ){
    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // Check for subscription products using "All products for subscription" add on
        if ( isset($cart_item['wcsatt_data']['active_subscription_scheme']) 
        && ! empty($cart_item['wcsatt_data']['active_subscription_scheme']) ) {
            $is_valid = false; // Subscription product found: Make coupons "not valid"
            break; // Stop and exit from the loop
        }
    }
    return $is_valid;
}

代码进入活动子主题(或活动主题)的function.php文件。应该可以。


2)。对于普通订阅产品(带注释的代码)

add_filter( 'woocommerce_coupon_is_valid', 'disable_coupons_for_subscription_products', 10, 3 );
function disable_coupons_for_subscription_products( $is_valid, $coupon, $discount ){
    // Loop through cart items
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // Check for subscription products
        if( in_array( $cart_item['data']->get_type(), array('subscription', 'subscription_variation') ) ) {
            $is_valid = false; // Subscription product found: Make coupons "not valid"
            break; // Stop and exit from the loop
        }
    }
    return $is_valid;
}

代码进入活动子主题(或活动主题)的function.php文件。经过测试,可以正常工作。