From 7cd1a030430d7215b4548d6a7037f79abd0dcb72 Mon Sep 17 00:00:00 2001 From: "Panos (Panagiotis Synetos)" <2484390+PanosSynetos@users.noreply.github.com> Date: Thu, 10 Nov 2022 19:39:26 +0200 Subject: [PATCH] [HPOS] Move hook `woocommerce_before_delete_order` before `woocommerce_before_delete_order` (#35517) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🧑‍💻 Move hook woocommerce_before_delete_order before deleting order --- .../changelog/fix-35516-hpos-delete-order-hook | 4 ++++ .../DataStores/Orders/OrdersTableDataStore.php | 15 ++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 plugins/woocommerce/changelog/fix-35516-hpos-delete-order-hook diff --git a/plugins/woocommerce/changelog/fix-35516-hpos-delete-order-hook b/plugins/woocommerce/changelog/fix-35516-hpos-delete-order-hook new file mode 100644 index 00000000000..9e405fc6dc8 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-35516-hpos-delete-order-hook @@ -0,0 +1,4 @@ +Significance: patch +Type: tweak + +Move HPOS hook woocommerce_before_delete_order before deleting order. diff --git a/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php b/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php index 64885983ab5..7568fbb5b77 100644 --- a/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php +++ b/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php @@ -1732,13 +1732,6 @@ FROM $order_meta_table } if ( ! empty( $args['force_delete'] ) ) { - $this->delete_order_data_from_custom_order_tables( $order_id ); - $order->set_id( 0 ); - - // If this datastore method is called while the posts table is authoritative, refrain from deleting post data. - if ( ! is_a( $order->get_data_store(), self::class ) ) { - return; - } /** * Fires immediately before an order is deleted from the database. @@ -1750,6 +1743,14 @@ FROM $order_meta_table */ do_action( 'woocommerce_before_delete_order', $order_id, $order ); + $this->delete_order_data_from_custom_order_tables( $order_id ); + $order->set_id( 0 ); + + // If this datastore method is called while the posts table is authoritative, refrain from deleting post data. + if ( ! is_a( $order->get_data_store(), self::class ) ) { + return; + } + // Delete the associated post, which in turn deletes order items, etc. through {@see WC_Post_Data}. // Once we stop creating posts for orders, we should do the cleanup here instead. wp_delete_post( $order_id );