我已经找了好几个小时了...
在编辑现有订单中的产品数量后,我无法弄清楚如何在单击“保存”时执行功能。
我试过这个:
add_action('woocommerce_order_edit_product', 'your_function_name');
function your_function_name(){
//my php function code would be here
}
但单击“保存”时不会调用 your_function_name 函数。
我测试了该函数,当直接调用它时,它可以正常工作,所以我认为我弄错了钩子......
经过两天的努力,我发现了这个问题:有两个钩子,一个在保存之前,一个在保存之后:
- 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 );
}
意识到..
将产品添加到现有订单确实实现了在此之前调用的另一个钩子(因此,当点击“保存”时,上述函数将触发,但订单及其项目在保存之前已设置(添加产品时,订单将立即保存) ). 这意味着$order = new WC_Order( $order_id );
之前和之后都会有新的项目,所以无法找到发生了什么变化。)。但是woocommerce_ajax_add_order_item_meta
钩子是在“添加产品”时触发的,并在这方面帮助了我。大家编码愉快..
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)