如何用wc_deposits_product_enable_deposit过滤器禁用指定产品的WooCommerce Deposits功能
WooCommerce Deposits 指定产品禁用定金功能修复方案
原代码存在的问题
- 钩子参数数量不匹配:
add_filter声明接受3个参数,但回调函数只定义了2个入参,参数数量不匹配会导致钩子逻辑无法正常执行 - 运算符使用错误:
if ($product = 6283)是赋值操作而非相等判断,会强制给$product变量赋值为6283,判断逻辑永远返回真,完全不符合需求 - 冗余代码:已经直接拿到
$product_id参数,不需要额外调用wc_get_product获取产品对象,无用代码会增加不必要的性能开销
修复后可用代码
add_filter('wc_deposits_product_enable_deposit','wcdp_custom_wc_deposits_disable_productid',10,2); function wcdp_custom_wc_deposits_disable_productid($enabled , $product_id) { // 填入需要禁用定金的产品ID,多个ID用英文逗号分隔即可,比如 [6283, 1234, 5678] $disabled_product_ids = [6283]; if (in_array($product_id, $disabled_product_ids)) { $enabled = false; } return $enabled; }
代码说明
- 调整
add_filter最后一个参数为2,和回调函数的入参数量保持一致,保证钩子参数能正常传入 - 直接使用钩子自带的
$product_id做判断,省去多余的产品对象查询操作 - 用数组存储需要禁用的产品ID,后续如果要新增禁用的产品,只需要往数组里加ID即可,维护更方便
内容的提问来源于stack exchange,提问作者Franceoutdoors
相关产品推荐
相关产品推荐

