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

求助:WooCommerce中商品处于backorder状态时,如何同时禁用分类归档页和商品页的加入购物车按钮

求助:WooCommerce中商品处于backorder状态时,如何同时禁用分类归档页和商品页的加入购物车按钮

嘿,我看到你已经尝试了一段代码,但它只在商品详情页生效对吧?问题出在你用的woocommerce_single_product_summary这个钩子——它只在单个商品页触发,分类归档页根本不会执行这段代码,所以分类页的加购按钮自然没变化。

给你两个更靠谱的解决方案,能同时覆盖商品页和分类页:

方案一:直接通过可购买状态过滤器全局控制

这个方法最简洁,直接修改woocommerce_is_purchasable过滤器的逻辑,让处于backorder状态的商品全局不可购买,这样不管是商品页还是分类页,加购按钮都会被禁用:

add_filter( 'woocommerce_is_purchasable', 'disable_purchasable_for_backordered_items', 10, 2 );
function disable_purchasable_for_backordered_items( $purchasable, $product ) {
    // 检查当前商品是否处于backorder状态
    if ( $product->is_on_backorder() ) {
        $purchasable = false;
    }
    return $purchasable;
}

这段代码的逻辑很简单:过滤器本身会传入默认的可购买状态$purchasable和当前商品对象$product,我们只在商品处于backorder时把可购买状态改成false即可。记得把你之前写的那段代码删掉,避免冲突哦。

方案二:自定义分类页加购按钮显示(可选)

有些主题可能会在商品不可购买时,还是显示加购按钮但置灰,如果你想直接替换成自定义文本或者隐藏按钮,可以再加一个针对分类页的钩子:

add_filter( 'woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart_button_for_backordered', 10, 2 );
function replace_loop_add_to_cart_button_for_backordered( $button, $product ) {
    if ( $product->is_on_backorder() ) {
        // 这里可以自定义显示内容,比如改成"缺货预定"或者直接隐藏
        $button = '<span class="button disabled">暂时无法购买</span>';
    }
    return $button;
}

这个钩子专门处理分类归档页的加购按钮,能让你更灵活地控制显示效果,和方案一搭配使用效果更好。

备注:内容来源于stack exchange,提问作者Chris Rontos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:34:10