检查优惠券是否应用于WooCommerce中的购物车


Check if a coupon is applied to cart in WooCommerce

我需要找到一种方法来检查优惠券是否应用于WooCommerce结账,如果是的话,我想做点什么。我试着四处寻找,但找不到解决方案。

以下是我正在尝试的精简版本:

add_action('woocommerce_before_cart_table', 'apply_product_on_coupon');
function apply_product_on_coupon( ) {
    global $woocommerce;
    $coupon_id = '12345';
        
        if( $woocommerce->cart->applied_coupons === $coupon_id ) {
        echo 'YAY it works';
    }
}

所以这不是检查购物车中是否存在优惠券的正确方法吗?if( $woocommerce->cart->applied_coupons === $coupon_id )

从您的示例来看,这样的东西可能会起作用。这是未经测试的,但应该会让你朝着正确的方向迈出一步:

add_action('woocommerce_applied_coupon', 'apply_product_on_coupon');
function apply_product_on_coupon( ) {
    global $woocommerce;
    $coupon_id = '12345';
    $free_product_id = 54321;
    if(in_array($coupon_id, $woocommerce->cart->get_applied_coupons())){
        $woocommerce->cart->add_to_cart($free_product_id, 1);
    }
}
global $woocommerce;
if (!empty($woocommerce->cart->applied_coupons))
{
        //print_r($woocommerce->cart->applied_coupons); - keys of coupons here
}

这可能是一个年龄问题,但一个简单的解决方案是使用

WC()->cart->applied_coupons

这个返回数组列出了应用的优惠券,然后可以使用foreach、for或in_array来检查应用的优惠券。

希望对有所帮助

如果你知道优惠券代码,但不知道优惠券帖子ID,你可以使用realmag777的答案和maiorano84的答案的混合。

function CheckCouponIsApplied($cpn_code)
{
    global $woocommerce;
    $lowercasecouponcode = strtolower($cpn_code); //ENSURE LOWERCASE TO MATCH WOOCOMMERCE NORMALIZATION
    return in_array($lowercasecouponcode, $woocommerce->cart->applied_coupons);
}