WC_Coupon::from_order_itempublic staticWC 10.6.0

Create a WC_Coupon instance from an order's coupon line item without validation.

This is useful for read-only contexts (e.g., REST API responses) where the stored data should be returned even if it contains invalid values.

Method of the class: WC_Coupon{}

No Hooks.

Returns

self. A WC_Coupon instance populated with the stored data.

Usage

$result = WC_Coupon::from_order_item( $order_item ): self;
$order_item(WC_Order_Item_Coupon) (required)
The coupon line item from an order.

Changelog

Since 10.6.0 Introduced.

WC_Coupon::from_order_item() code WC 10.8.1

public static function from_order_item( \WC_Order_Item_Coupon $order_item ): self {
	$coupon_info = $order_item->get_meta( 'coupon_info', true );
	if ( is_string( $coupon_info ) && '' !== $coupon_info ) {
		$data = self::parse_short_info( $coupon_info );
	} else {
		$coupon_meta = $order_item->get_meta( 'coupon_data', true );
		if ( is_object( $coupon_meta ) || is_array( $coupon_meta ) ) {
			$coupon_meta = (array) $coupon_meta;
			$data        = array(
				'id'            => 0,
				'code'          => '',
				'discount_type' => $coupon_meta['discount_type'] ?? 'fixed_cart',
				'amount'        => (float) ( $coupon_meta['amount'] ?? 0 ),
				'free_shipping' => (bool) ( $coupon_meta['free_shipping'] ?? false ),
			);
		} else {
			return new self();
		}
	}

	$coupon = new self();
	$coupon->set_id( $data['id'] );
	$coupon->set_code( $data['code'] );
	$coupon->set_discount_type_core( $data['discount_type'], false );
	$coupon->set_prop( 'amount', $data['amount'] );
	$coupon->set_free_shipping( $data['free_shipping'] );
	return $coupon;
}