WC_Coupon::is_valid_for_product
Check if a coupon is valid for a product.
Method of the class: WC_Coupon{}
Hooks from the method
Returns
true|false.
Usage
$WC_Coupon = new WC_Coupon(); $WC_Coupon->is_valid_for_product( $product, $values );
- $product(WC_Product) (required)
- Product instance.
- $values(array)
- Values.
Default: array()
WC_Coupon::is_valid_for_product() WC Coupon::is valid for product code WC 10.3.6
public function is_valid_for_product( $product, $values = array() ) {
if ( ! $this->is_type( wc_get_product_coupon_types() ) || ! is_a( $product, WC_Product::class ) ) {
return apply_filters( 'woocommerce_coupon_is_valid_for_product', false, $product, $this, $values );
}
$valid = false;
$product_cats = wc_get_product_cat_ids( $product->is_type( ProductType::VARIATION ) ? $product->get_parent_id() : $product->get_id() );
$product_ids = array( $product->get_id(), $product->get_parent_id() );
// Specific products get the discount.
if ( count( $this->get_product_ids() ) && count( array_intersect( $product_ids, $this->get_product_ids() ) ) ) {
$valid = true;
}
// Category discounts.
if ( count( $this->get_product_categories() ) && count( array_intersect( $product_cats, $this->get_product_categories() ) ) ) {
$valid = true;
}
// No product ids - all items discounted.
if ( ! count( $this->get_product_ids() ) && ! count( $this->get_product_categories() ) ) {
$valid = true;
}
// Specific product IDs excluded from the discount.
if ( count( $this->get_excluded_product_ids() ) && count( array_intersect( $product_ids, $this->get_excluded_product_ids() ) ) ) {
$valid = false;
}
// Specific categories excluded from the discount.
if ( count( $this->get_excluded_product_categories() ) && count( array_intersect( $product_cats, $this->get_excluded_product_categories() ) ) ) {
$valid = false;
}
// Sale Items excluded from discount.
if ( $this->get_exclude_sale_items() && $product->is_on_sale() ) {
$valid = false;
}
return apply_filters( 'woocommerce_coupon_is_valid_for_product', $valid, $product, $this, $values );
}