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


WooCommerce: hook when saving changes to product in an order

我已经搜索了几个小时...

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

我试过这个:

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

但是单击保存时不会调用your_function_name函数。

测试了该函数,当直接调用它时,它正常工作,所以我认为我弄错了钩子......

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

  1. woocommerce_before_save_order_items
  2. woocommerce_saved_order_items

两者都在后端保存订单时被触发。 一个在保存之前,一个在保存之后。

两个钩子都携带相同的变量:$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 );将已经有新项目, 之前和之后,所以没有办法找到,发生了什么变化。但是woocommerce_ajax_add_order_item_meta钩子是在"添加产品"上触发的,并在这方面帮助了我。祝大家编码愉快..

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

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
}