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

WooCommerce:商品预售时隐藏加入购物车按钮并保留库存状态

WooCommerce预售商品隐藏加入购物车按钮但保留库存状态的解决办法

你用的代码之所以会把库存状态也移除,是因为woocommerce_is_purchasable设为false后,WooCommerce会判定商品完全不可购买,连带库存状态(包括预售提示)也一起隐藏了。换个思路,直接针对加入购物车按钮的显示做控制,就能保留库存状态。

下面是全站生效的代码方案:

核心代码

// 单商品页面:预售时隐藏加入购物车按钮
add_action('woocommerce_single_product_summary', 'hide_single_add_to_cart_for_backorder', 9);
function hide_single_add_to_cart_for_backorder() {
    global $product;
    
    if ($product->is_on_backorder()) {
        // 移除默认的单商品页加购按钮动作
        remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
    }
}

// 产品列表页(商城页、分类页等):预售时隐藏加入购物车按钮
add_filter('woocommerce_loop_add_to_cart_link', 'hide_loop_add_to_cart_for_backorder', 10, 2);
function hide_loop_add_to_cart_for_backorder($link, $product) {
    if ($product->is_on_backorder()) {
        return ''; // 返回空字符串,隐藏按钮
    }
    return $link;
}

可选:强制显示预售库存状态

如果你的主题对库存状态有特殊处理,导致预售提示不显示,可以再加这段代码自定义显示文本:

add_filter('woocommerce_get_stock_html', 'show_backorder_stock_status', 10, 2);
function show_backorder_stock_status($html, $product) {
    if ($product->is_on_backorder()) {
        $html = '<p class="stock onbackorder">' . esc_html__('可预售', 'woocommerce') . '</p>';
    }
    return $html;
}

这段代码的逻辑是直接操作加购按钮的输出,不改动商品的“可购买”属性,所以库存状态会正常显示,完美实现你要的效果。

内容的提问来源于stack exchange,提问作者Neal Ghoshal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:57:49