WooCommerce:在订单中保存对产品的更改时挂钩

时间:2015-01-28 21:24:23

标签: php wordpress woocommerce action hook

我一直在寻找......

在编辑现有订单中的产品数量后单击“保存”时,我无法弄清楚如何执行功能。

我试过了:

add_action('woocommerce_order_edit_product', 'your_function_name');
function your_function_name(){
//my php function code would be here
}

但单击“保存”时未调用your_function_name函数。

我测试了这个函数,当它直接调用它时它可以正常工作,所以我认为我得到了错误的钩子......

2 个答案:

答案 0 :(得分:4)

在与这个问题搏斗了2天后,我发现它:有两个钩子,一个在保存之前,一个在保存之后:

  1. woocommerce_before_save_order_items
  2. woocommerce_saved_order_items
  3. 在后端保存订单时都会触发。一个在保存之前,一个在之后。

    两个钩子都带有相同的变量:$ order_id(int)& $ items(array)

    我猜第一个钩子,您可以获得旧订单并将其内容与items数组进行比较,以查看更改的内容。至少这是我现在想要完成的事情。

    所以这就是你触发这个的方法:

    add_action( 'woocommerce_before_save_order_items', 'so42270384_woocommerce_before_save_order_items', 10, 2 );
    function so42270384_woocommerce_before_save_order_items( $order_id, $items ) {
        echo $order_id;
        var_dump( $items );
    }
    

    要知道..

    将一个产品添加到一个出口订单确实实现了另一个在此之前被调用的钩子(所以当点击SAVE时,上面的函数将触发,但是在保存之前已经设置了订单及其项目(添加产品时,订单将立即保存)。这意味着$order = new WC_Order( $order_id );将在其之前和之后都有新项目,因此无法找到,发生了什么变化。)但{&#39}添加产品'并为此帮助了我。快乐编码每个人..

答案 1 :(得分:0)

检查错误日志。应该是一些信息。如果我正在查看正确的操作,则需要四个参数:

do_action( 'woocommerce_order_edit_product', $this->id, $item_id, $args, $product );

所以你的代码应该是:

add_action('woocommerce_order_edit_product', 'your_function_name', 10, 4);
function your_function_name($id, $item_id, $args, $product){
//my php function code would be here
}