WooCommerce的woocommerce_order_status_completed钩子报ArgumentCountError错误如何解决
报错根因
你的代码存在钩子参数声明和函数入参数量不匹配的问题:
add_action( 'woocommerce_order_status_completed', 'order_completed',10,1);这行代码的最后一个参数1,代表你告诉WordPress触发该钩子时只给order_completed函数传递1个参数,但你定义order_completed函数时写了4个入参($order_id, $old_status, $new_status, $order),PHP校验参数数量不匹配就抛出了对应的致命错误。
修复方案
二选一即可:
方案1:修改钩子参数传递数量
将add_action行的最后一个参数改为4,和函数入参数量对齐:
add_action( 'woocommerce_order_status_completed', 'order_completed', 10, 4 );
方案2:简化函数入参(更推荐,冗余逻辑更少)
woocommerce_order_status_completed钩子本身就是订单状态切换为「完成」时才会触发,不需要额外判断新状态,直接简化函数逻辑即可,不需要修改原有add_action配置:
add_action( 'woocommerce_order_status_completed', 'order_completed',10,1); function order_completed($order_id) { $order = wc_get_order( $order_id ); $total = $order->get_total(); $coin_avl = $total*25/100; wp_update_user( array( // 这里替换为$order->get_user_id(),避免后台管理员手动改订单状态时,积分错加到管理员账号上 'ID' => $order->get_user_id(), 'avl_coin' => $coin_avl ) ); }
验证方法
修改代码后,手动将一个测试订单的状态改为完成,查看是否还有报错,以及对应用户的avl_coin字段是否按预期更新即可。
内容的提问来源于stack exchange,提问作者Haren Sarma
相关产品推荐
相关产品推荐

