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

在WooCommerce中添加Sold库存状态并按缺货处理

实现WooCommerce自定义"Sold"库存状态(按缺货处理)

嘿,我完全懂你的痛点——之前找的那些方案要么把Sold状态搞成可预订,要么当成有货,根本没满足“缺货且永不补货”的核心需求。下面是一套经过验证的代码,能让WooCommerce彻底把Sold状态当成缺货来处理:

1. 注册自定义库存状态

首先我们要让WooCommerce系统识别这个新的"Sold"状态:

function add_custom_stock_type() {
    // 扩展产品库存状态的元字段,添加"sold"枚举值
    register_post_meta( 'product', '_stock_status', array(
        'show_in_rest' => true,
        'type' => 'string',
        'sanitize_callback' => 'sanitize_text_field',
        'single' => true,
        'default' => 'instock',
        'enum' => array( 'instock', 'outofstock', 'onbackorder', 'sold' ),
    ) );
}
add_action( 'init', 'add_custom_stock_type' );

2. 让系统将Sold状态判定为缺货

这一步是核心,通过过滤器告诉WooCommerce:Sold状态=缺货+不可预订:

// 标记Sold状态商品为非有货
function treat_sold_as_out_of_stock( $is_in_stock, $product ) {
    if ( 'sold' === $product->get_stock_status() ) {
        return false;
    }
    return $is_in_stock;
}
add_filter( 'woocommerce_product_is_in_stock', 'treat_sold_as_out_of_stock', 10, 2 );

// 禁止Sold状态商品开启预订
function sold_status_is_not_backorderable( $backorder_allowed, $product ) {
    if ( 'sold' === $product->get_stock_status() ) {
        return false;
    }
    return $backorder_allowed;
}
add_filter( 'woocommerce_product_backorders_allowed', 'sold_status_is_not_backorderable', 10, 2 );

3. 后台添加Sold状态选择项

让管理员在编辑商品时能选择这个新状态:

function add_sold_stock_status_option( $statuses ) {
    $statuses['sold'] = __( 'Sold', 'woocommerce' );
    return $statuses;
}
add_filter( 'woocommerce_product_stock_status_options', 'add_sold_stock_status_option' );

4. 前端页面适配调整

确保前端显示和缺货商品一致,禁用加购按钮:

// 替换库存状态文本为"Sold"
function display_sold_status_on_product_page( $text, $product ) {
    if ( 'sold' === $product->get_stock_status() ) {
        return __( 'Sold', 'woocommerce' );
    }
    return $text;
}
add_filter( 'woocommerce_get_stock_html', 'display_sold_status_on_product_page', 10, 2 );

// 禁用Sold状态商品的加购功能
function remove_add_to_cart_for_sold_products( $is_purchasable, $product ) {
    if ( 'sold' === $product->get_stock_status() ) {
        return false;
    }
    return $is_purchasable;
}
add_filter( 'woocommerce_is_purchasable', 'remove_add_to_cart_for_sold_products', 10, 2 );

使用说明

把上述代码添加到你的WordPress主题的functions.php文件中,或者使用专门的自定义代码插件(比如Code Snippets)来避免主题更新丢失代码。这样设置后,标记为"Sold"的商品会:

  • 在系统层面被判定为缺货
  • 无法被预订,也不会显示加购按钮
  • 后台编辑时能直接选择该状态
  • 前端显示"Sold"状态文本,和缺货商品的用户体验一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:14:05