WC_Discounts::validate_coupon_product_categories()protectedWC 3.2.0

Ensure coupon is valid for product categories in the list is valid or throw exception.

Метод класса: WC_Discounts{}

Хуков нет.

Возвращает

true|false.

Использование

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->validate_coupon_product_categories( $coupon );
$coupon(WC_Coupon) (обязательный)
Coupon data.

Список изменений

С версии 3.2.0 Введена.

Код WC_Discounts::validate_coupon_product_categories() WC 8.7.0

protected function validate_coupon_product_categories( $coupon ) {
	if ( count( $coupon->get_product_categories() ) > 0 ) {
		$valid = false;

		foreach ( $this->get_items_to_validate() as $item ) {
			if ( $coupon->get_exclude_sale_items() && $item->product && $item->product->is_on_sale() ) {
				continue;
			}

			$product_cats = wc_get_product_cat_ids( $item->product->get_id() );

			if ( $item->product->get_parent_id() ) {
				$product_cats = array_merge( $product_cats, wc_get_product_cat_ids( $item->product->get_parent_id() ) );
			}

			// If we find an item with a cat in our allowed cat list, the coupon is valid.
			if ( count( array_intersect( $product_cats, $coupon->get_product_categories() ) ) > 0 ) {
				$valid = true;
				break;
			}
		}

		if ( ! $valid ) {
			throw new Exception( __( 'Sorry, this coupon is not applicable to selected products.', 'woocommerce' ), 109 );
		}
	}

	return true;
}