首页 > 解决方案 > 根据购物篮中的产品隐藏优惠券

问题描述

我正在尝试开发一小段代码,该代码基于 WooCommerce 订阅和 WooCommerce 订阅的所有产品插件,根据客户是选择订阅还是一次性购买,在结帐时隐藏/显示优惠券选项。

通过在线阅读,我设法创建了隐藏所有结帐用户的优惠券框的代码,但它缺乏检查购物篮是否为订阅的功能。

这是到目前为止的代码:

function hide_coupon_field( $enabled ) {

if ( is_checkout() ) {
    $enabled = false;
}

return $enabled;
}
add_filter( 'woocommerce_coupons_enabled', 'hide_coupon_field' );

WooCommerce 订阅的所有产品的文档似乎不是很深入,因此我不确定有哪些功能(如果有)可用于检查购物篮类型。

谢谢

标签: phpwordpresswoocommerce

解决方案


这应该可以解决问题。它的作用是遍历购物车中的所有产品,检查它们是否有一个特定字段(由 WooCommerce 订阅的所有产品插件使用)指示当前产品是订阅产品,然后禁用优惠券字段。

如果任何产品是订阅产品,它会禁用优惠券字段。

function hide_coupon_field( $enabled ){
    
    $cart_contents = WC()->cart->cart_contents;
    foreach ( $cart_contents as $cart_item ) {
        if ( ! empty( $cart_item[ 'wcsatt_data'][ 'active_subscription_scheme' ] ) ) {
            
            // cart contains a subscription product
            $enabled = false;
            break;
        }
    }
    
    // else keeps the field enabled
    return $enabled;
}

add_filter( 'woocommerce_coupons_enabled', 'hide_coupon_field' );

推荐阅读