WC_Cart_Totals::get_coupons_from_cart │ protected │ WC 3.2.0

Return array of coupon objects from the cart. Normalises data into the same format for use by this class.

Method of the class: WC_Cart_Totals{}

Hooks from the method

Returns

null. Nothing (null).

Usage

// protected - for code of main (parent) or child class
$result = $this->get_coupons_from_cart();

Changelog

Since 3.2.0 Introduced.

WC_Cart_Totals::get_coupons_from_cart() code WC 11.2.2

protected function get_coupons_from_cart() {
	$this->coupons                      = $this->cart->get_coupons();
	$this->coupon_application_positions = array();

	// The position tie-break only applies once two coupons can tie, and this setting is not autoloaded,
	// so skip the option read for coupon-free and single-coupon carts.
	$sequential_discounts = count( $this->coupons ) > 1 && 'yes' === get_option( 'woocommerce_calc_discounts_sequentially' );
	$position             = 0;

	foreach ( $this->coupons as $coupon ) {
		if ( $sequential_discounts ) {
			$this->coupon_application_positions[ spl_object_id( $coupon ) ] = $position++;
		}

		switch ( $coupon->get_discount_type() ) {
			case 'fixed_product':
				$coupon->sort = 1;
				break;
			case 'percent':
				$coupon->sort = 2;
				break;
			case 'fixed_cart':
				$coupon->sort = 3;
				break;
			default:
				$coupon->sort = 0;
				break;
		}

		// Allow plugins to override the default order.
		$coupon->sort = apply_filters( 'woocommerce_coupon_sort', $coupon->sort, $coupon );
	}

	uasort( $this->coupons, array( $this, 'sort_coupons_callback' ) );
}