WC_Cart::add_discount PHP Method

add_discount() public method

Applies a coupon code passed to the method.
public add_discount ( string $coupon_code ) : boolean
$coupon_code string - The code to apply
return boolean True if the coupon is applied, false if it does not exist or cannot be applied
    public function add_discount($coupon_code)
    {
        // Coupons are globally disabled
        if (!wc_coupons_enabled()) {
            return false;
        }
        // Sanitize coupon code
        $coupon_code = apply_filters('woocommerce_coupon_code', $coupon_code);
        // Get the coupon
        $the_coupon = new WC_Coupon($coupon_code);
        // Check it can be used with cart
        if (!$the_coupon->is_valid()) {
            wc_add_notice($the_coupon->get_error_message(), 'error');
            return false;
        }
        // Check if applied
        if ($this->has_discount($coupon_code)) {
            $the_coupon->add_coupon_message(WC_Coupon::E_WC_COUPON_ALREADY_APPLIED);
            return false;
        }
        // If its individual use then remove other coupons
        if ($the_coupon->get_individual_use()) {
            $this->applied_coupons = apply_filters('woocommerce_apply_individual_use_coupon', array(), $the_coupon, $this->applied_coupons);
        }
        if ($this->applied_coupons) {
            foreach ($this->applied_coupons as $code) {
                $coupon = new WC_Coupon($code);
                if ($coupon->get_individual_use() && false === apply_filters('woocommerce_apply_with_individual_use_coupon', false, $the_coupon, $coupon, $this->applied_coupons)) {
                    // Reject new coupon
                    $coupon->add_coupon_message(WC_Coupon::E_WC_COUPON_ALREADY_APPLIED_INDIV_USE_ONLY);
                    return false;
                }
            }
        }
        $this->applied_coupons[] = $coupon_code;
        // Choose free shipping
        if ($the_coupon->get_free_shipping()) {
            $packages = WC()->shipping->get_packages();
            $chosen_shipping_methods = WC()->session->get('chosen_shipping_methods');
            foreach ($packages as $i => $package) {
                $chosen_shipping_methods[$i] = 'free_shipping';
            }
            WC()->session->set('chosen_shipping_methods', $chosen_shipping_methods);
        }
        $the_coupon->add_coupon_message(WC_Coupon::WC_COUPON_SUCCESS);
        do_action('woocommerce_applied_coupon', $coupon_code);
        return true;
    }
WC_Cart