/** * Performs coupon checks after checkout validation. * * @param array $posted posted form data */ public static function woocommerce_after_checkout_validation($posted) { global $woocommerce; if (isset($woocommerce->cart)) { $cart = $woocommerce->cart; if (!empty($cart->applied_coupons)) { if (method_exists('Affiliates_Attributes_WordPress', 'get_affiliate_for_coupon')) { $valid = true; $emails = array($posted['billing_email']); if (is_user_logged_in()) { $current_user = wp_get_current_user(); $emails[] = $current_user->user_email; } $emails = array_map('sanitize_email', array_map('strtolower', $emails)); self::remove_filters(); foreach ($cart->applied_coupons as $key => $code) { $coupon = new WC_Coupon($code); if (!is_wp_error($coupon->is_valid())) { if ($affiliate_id = Affiliates_Attributes_WordPress::get_affiliate_for_coupon($coupon->code)) { if ($user_id = get_current_user_id()) { if ($affiliate_ids = affiliates_get_user_affiliate($user_id)) { if (in_array($affiliate_id, $affiliate_ids)) { $valid = false; break; } } } if ($affiliate = affiliates_get_affiliate($affiliate_id)) { if (isset($affiliate['email']) && in_array(strtolower($affiliate['email']), $emails)) { $valid = false; break; } } } } } self::add_filters(); if (!$valid) { $coupon->add_coupon_message(WC_Coupon::E_WC_COUPON_INVALID_REMOVED); unset($cart->applied_coupons[$key]); $woocommerce->session->coupon_codes = $cart->applied_coupons; $woocommerce->session->refresh_totals = true; } } } } }
/** * Applies a coupon code passed to the method. * * @param string $coupon_code - The code to apply * @return bool 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; }
/** * Applies a coupon code passed to the method. * * @param string $coupon_code - The code to apply * @return bool True if the coupon is applied, false if it does not exist or cannot be applied */ public function add_discount($coupon_code) { global $woocommerce; // Coupons are globally disabled if (!$woocommerce->cart->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); if ($the_coupon->id) { // Check it can be used with cart if (!$the_coupon->is_valid()) { $woocommerce->add_error($the_coupon->get_error_message()); return false; } // Check if applied if ($woocommerce->cart->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->individual_use == 'yes') { $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) { $existing_coupon = new WC_Coupon($code); if ($existing_coupon->individual_use == 'yes' && false === apply_filters('woocommerce_apply_with_individual_use_coupon', false, $the_coupon, $existing_coupon, $this->applied_coupons)) { // Reject new coupon $existing_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->enable_free_shipping()) { $woocommerce->session->chosen_shipping_method = 'free_shipping'; } $this->calculate_totals(); $the_coupon->add_coupon_message(WC_Coupon::WC_COUPON_SUCCESS); do_action('woocommerce_applied_coupon', $coupon_code); return true; } else { $the_coupon->add_coupon_message(WC_Coupon::E_WC_COUPON_NOT_EXIST); return false; } return false; }