我已经搜索了几个小时...
我无法弄清楚在编辑现有订单中的产品数量后单击"保存"时如何执行函数。
我试过这个:
add_action('woocommerce_order_edit_product', 'your_function_name');
function your_function_name(){
//my php function code would be here
}
但是单击保存时不会调用your_function_name函数。
我测试了该函数,当直接调用它时,它正常工作,所以我认为我弄错了钩子......
在与这个问题搏斗了 2 天后,我找到了它:有两个钩子,一个在保存之前,一个在保存之后:
- woocommerce_before_save_order_items
- 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
}