Changes to order item deletion in WooCommerce 11.1

WooCommerce 11.0 introduced deferred order-item deletion: remove_order_items() clears items in memory, while database deletion occurs and the woocommerce_removed_order_items hook fires during the next save().

In WooCommerce 11.1, we changed how WC_Abstract_Order::remove_order_items() handles persisted order items.

Core data stores now record the IDs of order items present when removal is requested. Only those IDs will be deleted when the order is saved. This prevents extensions that save replacement items before $order->save() from having those new items accidentally deleted.

Custom order data stores overriding delete_items() retain synchronous deletion. They can opt into deferred deletion by also overriding the new optional delete_items_by_ids() method. Developers should check custom stores for incompatible existing get_item_ids() or delete_items_by_ids() declarations.

The existing hooks and arguments are unchanged. On the deferred path, woocommerce_removed_order_items fires when deletion occurs during $order->save().

Most extensions require no changes. Developers maintaining custom order data stores should review their deletion methods and any code relying on immediate deletion or hook timing.

Related: #67975, #68107.


Leave a Reply

Your email address will not be published. Required fields are marked *