You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WC Bookings过滤器报错:参数数量不足问题排查求助

解决WooCommerce Bookings过滤器woocommerce_bookings_calculated_booking_cost参数不足的问题

这个错误的核心原因很明确:WordPress默认只会给过滤器函数传递1个参数,而你定义的函数期望接收3个参数,但你在调用add_filter的时候没有明确告诉WordPress要传递更多参数,所以就出现了参数数量不匹配的致命错误。

问题细节拆解

你注册过滤器的代码是:

add_filter( 'woocommerce_bookings_calculated_booking_cost', 'foobar_price_changer' );

WordPress的add_filter函数有四个参数,其中第四个参数$accepted_args默认值是1,意思是只传递1个参数给你的回调函数。而woocommerce_bookings_calculated_booking_cost过滤器本身确实会传递3个参数($booking_cost、$product、$data),但因为你没指定$accepted_args,WP只传了第一个参数,导致你的函数收到1个参数却期望3个,直接触发ArgumentCountError。

另外注意下报错里的函数名是sbnb_modify_wc_bookings_price(),但你代码里的函数是foobar_price_changer,如果这是笔误的话,也要确保函数名完全一致,不然也会有问题。

修正后的代码

只需要在add_filter里加上第四个参数3,告诉WordPress要传递3个参数给你的回调函数:

function foobar_price_changer( $booking_cost, $product, $data ) {
    // 这里可以写你的价格修改逻辑,比如:
    // $booking_cost = $booking_cost * 1.1; // 加价10%
    return $booking_cost;
}
// 第四个参数3表示接收3个参数,第三个参数10是默认优先级(可选)
add_filter( 'woocommerce_bookings_calculated_booking_cost', 'foobar_price_changer', 10, 3 );

原理补充

WordPress的钩子(过滤器和动作)机制里,当你注册回调函数时,如果钩子本身会传递多个参数,你必须通过add_filter/add_action的第四个参数声明你要接收的参数数量,否则WP只会传递第一个参数。这是很多新手容易踩的坑,记住这个规则就可以避免类似的参数错误了。

内容的提问来源于stack exchange,提问作者errorous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:17:26