2
votes

I'm trying to hook a function to the order deletion (when permanently delete is clicked from admin page) but for some reason the function isn't called. My code looks something like

add_action('woocommerce_before_delete_order_item', function($id) {
    $order = new WC_Order($id);
    //do some stuff with order meta data
}, 10, 1);

I tried to throw and exception inside the function but no error occurred. Can somebody help?

3
Are you trying to hook into when an order is deleted or an item is deleted on an order? You're hooking into the item deletion action.Andy
I'm trying to hook the function after permanently delete is clicked when the order is completeduser1
You want to apply hook on order delete function ?mujuonly

3 Answers

9
votes

The woocommerce_before_delete_order_item action runs every time an item is deleted from an order, not every time an order is deleted. You need to use the before_delete_post hook:

add_action('before_delete_post', function($id) {
    $post_type = get_post_type($id);

    if ($post_type !== 'shop_order') {
        return;
    }

    $order = new WC_Order($id);
    //do some stuff with order meta data
}, 10, 1);

Depending on what it is you want to do, you may want to hook on to the action at an earlier stage by changing the priority argument from 10 to something smaller.

1
votes

if you intend to use the Move to thrash from the order details page on admin dashboard, you can use the wp_trash_post. The before_delete_post didn't work for me.

function onOrderDelete($orderId){
    $post_type = get_post_type($orderId);
    if($post_type !== 'shop_order') {
        return;
    }
    $order = wc_get_order($orderId);
    // do whatever with $order
}
add_action('wp_trash_post', 'onOrderDelete', 10, 1);
0
votes
function restrict_post_deletion($post_ID){
    $type = get_post_type($post_ID);
    if($type == 'shop_order'){
            $order = new WC_Order($post_ID);
           //do some stuff with order data
    }
}
add_action('wp_trash_post', 'restrict_post_deletion', 10, 1);
add_action('before_delete_post', 'restrict_post_deletion', 10, 1);

Try this code snippet