wc_update_coupon_usage_counts()
Update used coupon amount for each coupon within an order.
Hooks from the function
Returns
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 10.8.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( OrderStatus::CANCELLED, OrderStatus::FAILED, OrderStatus::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 ) ) {
wc_release_coupons_for_order( $order );
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;
}
}
wc_release_coupons_for_order( $order );
}
}