WC_Coupon::from_order_item
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() 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;
}