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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:13:29