WooCommerce可变产品自定义库存状态设置异常
修复WooCommerce可变产品自定义库存状态不生效的问题
你的代码失效主要有三个原因:
- 可变产品的库存状态由子变体决定,父产品自身的
get_stock_status()无法准确反映实际库存情况 - 钩子优先级设为1过低,容易被后续默认逻辑覆盖
- 未处理子变体的库存状态判断
修正后的代码如下:
add_filter( 'woocommerce_get_availability', 'custom_variable_product_availability', 10, 2 ); function custom_variable_product_availability( $availability, $product ) { // 覆盖可变产品及其子变体的库存状态 if ( $product->is_type( 'variable' ) || $product->is_type( 'variation' ) ) { // 处理父可变产品:需确认所有子变体都缺货才显示自定义消息 if ( $product->is_type( 'variable' ) ) { $all_out_of_stock = true; foreach ( $product->get_available_variations() as $variation ) { $variation_product = wc_get_product( $variation['variation_id'] ); if ( $variation_product->get_stock_status() !== 'outofstock' ) { $all_out_of_stock = false; break; } } if ( $all_out_of_stock ) { $availability['availability'] = __( 'Custom Out of Stock Message', 'woocommerce' ); $availability['class'] = 'out-of-stock'; } } // 处理子变体:单独判断缺货状态 else { if ( $product->get_stock_status() === 'outofstock' ) { $availability['availability'] = __( 'Custom Out of Stock Message', 'woocommerce' ); $availability['class'] = 'out-of-stock'; } } } return $availability; }
关键修改说明:
- 将钩子优先级调整为10,避免被默认WooCommerce逻辑覆盖
- 同时处理可变父产品和子变体的库存状态
- 父产品增加子变体遍历判断,确保只有所有变体都缺货时才显示自定义消息
- 同步更新
availability['class']字段,保证前端样式与状态一致
内容的提问来源于stack exchange,提问作者contactled
相关产品推荐
相关产品推荐

