wc_update_coupon_usage_counts()
Update used coupon amount for each coupon within an order.
Hooks from the function
Return
null
. Nothing (null).
Usage
wc_update_coupon_usage_counts( $order_id );
- $order_id(int) (required)
- Order ID.
Changelog
Since 3.0.0 | Introduced. |
wc_update_coupon_usage_counts() wc update coupon usage counts code WC 9.5.1
function wc_update_coupon_usage_counts( $order_id ) { $order = wc_get_order( $order_id ); if ( ! $order ) { return; } $has_recorded = $order->get_data_store()->get_recorded_coupon_usage_counts( $order ); $invalid_statuses = array( 'cancelled', 'failed', 'trash' ); /** * Allow invalid order status filtering for updating coupon usage. * * @since 9.0.0 * * @param array $invalid_statuses Array of statuses to consider invalid. */ $invalid_statuses = apply_filters( 'woocommerce_update_coupon_usage_invalid_statuses', $invalid_statuses ); if ( $order->has_status( $invalid_statuses ) && $has_recorded ) { $action = 'reduce'; $order->get_data_store()->set_recorded_coupon_usage_counts( $order, false ); } elseif ( ! $order->has_status( $invalid_statuses ) && ! $has_recorded ) { $action = 'increase'; $order->get_data_store()->set_recorded_coupon_usage_counts( $order, true ); } elseif ( $order->has_status( $invalid_statuses ) ) { $order->get_data_store()->release_held_coupons( $order, true ); return; } else { return; } if ( count( $order->get_coupon_codes() ) > 0 ) { foreach ( $order->get_coupon_codes() as $code ) { if ( StringUtil::is_null_or_whitespace( $code ) ) { continue; } $coupon = new WC_Coupon( $code ); $used_by = $order->get_user_id(); if ( ! $used_by ) { $used_by = $order->get_billing_email(); } switch ( $action ) { case 'reduce': $coupon->decrease_usage_count( $used_by ); break; case 'increase': $coupon->increase_usage_count( $used_by, $order ); break; } } $order->get_data_store()->release_held_coupons( $order, true ); } }