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

Php WooCommerce:在订单中保存对产品的更改时挂钩,php,wordpress,woocommerce,action,hook,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_函数\u name函数 我测试了该函数,当直接调用它时,它正常工作,所以我认为我

我已经找了好几个小时了

在编辑现有订单中的产品数量后,单击“保存”时,我无法理解如何执行函数

我试过这个:

add_action('woocommerce_order_edit_product', 'your_function_name');
function your_function_name(){
//my php function code would be here
}
但单击“保存”时,未调用your_函数\u name函数


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

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

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
}

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

  • 在保存订单项目之前,请选择商业项目
  • woocommerce\u已保存\u订单\u项目
  • 在后端保存订单时,两者都会触发。一个在保存之前,一个在保存之后

    两个钩子都携带相同的变量:$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\u order($order\u id)
    将在它之前和之后都有新项目,因此无法找到更改的内容。)。但是,
    woocommerce\u ajax\u add\u order\u item\u meta
    钩子在“add product”上被触发,并在这方面帮助了我。很高兴为每个人编码。

    -您是从管理端还是现场端进行此操作的?-如果在现场。。。查看订单详细信息时,从购物车管理端。错误日志中没有任何内容。。。我尝试了使用和不使用两个额外参数,两种方式都不会触发“your_function_name”函数您的_函数_name'不需要任何参数,它只是一个测试函数,以查看它是否被触发。抱歉。关于add_操作的工作方式是错误的。显然你可以省略这些论点。所以忽略我的回答。。。