WooCommerce:重写产品变体get_stock_quantity时如何获取当前变体对象?
解决WooCommerce特定产品变体重写库存数量的问题
核心问题原因
你当前的add_filter调用只声明接收1个参数,但WooCommerce的woocommerce_product_variation_get_stock_quantity钩子实际传递了两个参数:$value(原库存值)和$this(当前变体对象)。只需调整钩子的参数接收数量,就能拿到变体对象。
解决方案代码
function test_get_digital_stock_quantity( $value, $variation ) { // 替换为你需要设置永不缺货的变体SKU,支持多个SKU用数组 $target_skus = ['YOUR_TARGET_SKU']; // 检查当前变体是否属于目标SKU if ( in_array( $variation->get_sku(), $target_skus ) ) { // 返回足够大的数值,确保产品始终显示"有货"状态 return 9999; // 部分WooCommerce版本支持返回-1表示无限库存,可根据实际测试调整 } // 非目标变体,保留原库存值逻辑 return $value; } // 关键修改:将第四个参数从1改为2,声明接收2个钩子传递的参数 add_filter( 'woocommerce_product_variation_get_stock_quantity', 'test_get_digital_stock_quantity', 10, 2 );
代码说明
- 钩子参数调整:
add_filter的第四个参数accepted_args设置为2后,自定义函数就能接收第二个参数$variation——也就是当前的产品变体对象。 - SKU匹配逻辑:通过
$variation->get_sku()获取当前变体的SKU,与目标SKU对比,匹配时返回足够大的库存数值,强制产品显示有货状态。 - 不影响其他变体:非目标变体仍返回原始库存值,不会干扰其他产品的库存管理逻辑。
内容的提问来源于stack exchange,提问作者Lee Irving
相关产品推荐
相关产品推荐

