WooCommerce woocommerce_checkout_order_processed钩子无法接收posted_data问题
WooCommerce woocommerce_checkout_order_processed 钩子参数接收问题解决
问题核心是add_action注册钩子时未指定接收参数数量,WooCommerce默认仅传递1个参数($order_id),导致自定义函数无法获取$posted_data和$order。
解决步骤:
修改add_action调用,添加第四个参数$accepted_args并设置为3(该钩子共有3个参数):
// 关键:第四个参数设为3,指定接收3个参数 add_action( 'woocommerce_checkout_order_processed', 'wp_zlc_woocommerce_checkout_order_processed', 10, 3 ); function wp_zlc_woocommerce_checkout_order_processed( $order_id, $posted_data, $order ) { // 此处可正常调用三个参数 // 示例测试代码: // var_dump($posted_data); // var_dump($order); }
原因说明:
WooCommerce触发woocommerce_checkout_order_processed钩子时确实会传递$order_id、$posted_data、$order三个参数,但WordPress的add_action函数默认仅传递1个参数给回调函数。必须显式设置第四个参数$accepted_args为参数总数,才能让回调函数接收到所有参数。
如果不设置$accepted_args,即使函数定义了多个参数,WordPress只会传递1个,未设置默认值的参数会触发ArgumentCountError;设置默认值后虽不报错,但后续参数会被设为默认值(NULL),无法拿到实际数据。
内容的提问来源于stack exchange,提问作者Doveman
相关产品推荐
相关产品推荐

