没有调用Woocommerce订单删除钩子回调

时间:2016-06-28 14:09:52

标签: php wordpress wordpress-plugin woocommerce hook

我试图将某个功能挂钩到订单删除(当从管理页面点击永久删除时),但由于某种原因,该功能未被调用。我的代码看起来像

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

我试图在函数内抛出异常,但没有发生错误。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:6)

每次从订单中删除项目时都会运行woocommerce_before_delete_order_item操作,而不是每次删除订单时都会运行。您需要使用before_delete_post挂钩:

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

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

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

根据您想要做的事情,您可能希望通过将优先级参数从10更改为更小的值来挂接早期的操作。

答案 1 :(得分:0)

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);

试试此代码段

答案 2 :(得分:0)

如果您打算使用管理控制台上的订单详细信息页面上的移至壁垒,可以使用wp_trash_postbefore_delete_post对我不起作用。

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);