Automattic\WooCommerce\EmailEditor\Integrations\WooCommerce
Coupon_Code_Generator::generate_coupon
Generate a WooCommerce coupon from block attributes.
Method of the class: Coupon_Code_Generator{}
No Hooks.
Returns
String. The generated coupon code, or empty string on failure.
Usage
$Coupon_Code_Generator = new Coupon_Code_Generator(); $Coupon_Code_Generator->generate_coupon( $coupon_code, $attrs, $rendering_context ): string;
- $coupon_code(string) (required)
- The coupon code (empty if not yet generated).
- $attrs(array) (required)
- Block attributes.
- $rendering_context(Rendering_Context) (required)
- The rendering context.
Coupon_Code_Generator::generate_coupon() Coupon Code Generator::generate coupon code WC 10.9.1
public function generate_coupon( string $coupon_code, array $attrs, Rendering_Context $rendering_context ): string {
if ( ! empty( $coupon_code ) ) {
return $coupon_code;
}
if ( $rendering_context->get( 'is_user_preview' ) ) {
return Coupon_Code::COUPON_CODE_PLACEHOLDER;
}
if ( ! function_exists( 'wc_get_coupon_types' ) || ! class_exists( 'WC_Coupon' ) ) {
return '';
}
try {
$coupon = new \WC_Coupon();
$coupon->set_code( $this->generate_unique_code() );
$discount_type = $this->validate_discount_type( $attrs['discountType'] ?? 'percent' );
$coupon->set_discount_type( $discount_type );
if ( isset( $attrs['amount'] ) ) {
$coupon->set_amount( (float) $attrs['amount'] );
}
if ( ! empty( $attrs['expiryDay'] ) ) {
$expiration = time() + ( (int) $attrs['expiryDay'] * DAY_IN_SECONDS );
$coupon->set_date_expires( $expiration );
}
$coupon->set_free_shipping( ! empty( $attrs['freeShipping'] ) );
$coupon->set_minimum_amount( (float) ( $attrs['minimumAmount'] ?? 0 ) );
$coupon->set_maximum_amount( (float) ( $attrs['maximumAmount'] ?? 0 ) );
$coupon->set_individual_use( ! empty( $attrs['individualUse'] ) );
$coupon->set_exclude_sale_items( ! empty( $attrs['excludeSaleItems'] ) );
$coupon->set_product_ids( $this->extract_ids( $attrs['productIds'] ?? array() ) );
$coupon->set_excluded_product_ids( $this->extract_ids( $attrs['excludedProductIds'] ?? array() ) );
$coupon->set_product_categories( $this->extract_ids( $attrs['productCategoryIds'] ?? array() ) );
$coupon->set_excluded_product_categories( $this->extract_ids( $attrs['excludedProductCategoryIds'] ?? array() ) );
$email_restrictions = $this->parse_email_restrictions( $attrs['emailRestrictions'] ?? '' );
$recipient = $rendering_context->get_recipient_email();
if ( $recipient && is_email( $recipient ) ) {
$email_restrictions[] = $recipient;
}
$coupon->set_email_restrictions( array_unique( $email_restrictions ) );
$usage_limit = $attrs['usageLimit'] ?? 0;
$usage_limit_per_user = $attrs['usageLimitPerUser'] ?? 0;
$coupon->set_usage_limit( is_numeric( $usage_limit ) ? (int) $usage_limit : 0 );
$coupon->set_usage_limit_per_user( is_numeric( $usage_limit_per_user ) ? (int) $usage_limit_per_user : 0 );
$coupon->set_description(
__( 'Auto-generated coupon by WooCommerce Email Editor', 'woocommerce' )
);
$coupon->save();
return $coupon->get_code();
} catch ( \Exception $e ) {
wc_get_logger()->error(
'Coupon auto-generation failed: ' . $e->getMessage(),
array( 'source' => 'email-editor-coupon-generator' )
);
return '';
}
}