Woocommerce order delete hook callback no se está llamando

2 minutos de lectura

avatar de usuario de usuario1
usuario1

Estoy tratando de vincular una función a la eliminación del pedido (cuando se hace clic en Eliminar permanentemente desde la página de administración), pero por alguna razón no se llama a la función. Mi código se ve algo como

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

Traté de lanzar una excepción dentro de la función pero no ocurrió ningún error. ¿Alguien puede ayudar?

  • ¿Está tratando de conectarse cuando se elimina un pedido o se elimina un artículo en un pedido? Te estás conectando a la acción de eliminación de elementos.

    – Andy

    28 de junio de 2016 a las 14:11

  • Estoy tratando de enganchar la función después de hacer clic en eliminar permanentemente cuando se completa el pedido

    – usuario1

    28 de junio de 2016 a las 14:13

  • ¿Desea aplicar la función de eliminación de gancho en el pedido?

    – muy solo

    28 de junio de 2016 a las 14:22

Avatar de usuario de Andy
Andy

Él woocommerce_before_delete_order_item La acción se ejecuta cada vez que se elimina un artículo de un pedido, no cada vez que se elimina un pedido. Necesitas usar el before_delete_post gancho:

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

Dependiendo de lo que desee hacer, es posible que desee engancharse a la acción en una etapa anterior cambiando el argumento de prioridad de 10 a algo más pequeño.

  • También está el woocommerce_delete_order gancho (No puedo decir si es nuevo, pero quería mencionarlo para otras personas que lean eso)

    – Petschko

    2 de febrero de 2021 a las 14:19

  • @Petschko, parece que woocommerce_delete_order se llama después se borra el pedido: github.com/woocommerce/woocommerce/blob/…

    – Andy

    2 de febrero de 2021 a las 16:59

  • gracias por esta información, en algunos casos puede ser útil solo para hacer cosas después se borra el pedido

    – Petschko

    8 de febrero de 2021 a las 12:51

si tiene la intención de utilizar el Mover a la thrash desde la página de detalles del pedido en el panel de administración, puede usar el wp_trash_post. Él before_delete_post no funcionó para mí

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

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

Pruebe este fragmento de código

¿Ha sido útil esta solución?