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

WooCommerce:商品处于预售(backorder)状态时禁用加入购物车(Add to cart)按钮

解决WooCommerce预售商品禁用加入购物车按钮的问题

你的代码有两个关键问题导致它不起作用,我来帮你逐一修正:

问题1:错误调用属性而非方法

$product->is_on_backorder是错误写法——is_on_backorder()是WooCommerce产品对象的方法,必须加上括号才能正确调用它来判断商品是否处于预售状态。

问题2:钩子使用时机不当

你在自定义函数里动态添加woocommerce_is_purchasable过滤器,这个时机太晚了,过滤器可能已经执行完毕,所以不会生效。正确的做法是直接把判断逻辑挂到woocommerce_is_purchasable钩子上。


修正后的可用代码

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

代码说明:

  • 直接挂钩woocommerce_is_purchasable过滤器,这个过滤器负责控制商品是否可购买,返回false就会自动禁用加入购物车按钮。
  • 回调函数接收两个参数:$purchasable(商品默认的可购买状态)和$product(当前产品对象)。
  • 当检测到商品处于预售状态时,将$purchasable设为false,从而关闭购买功能。

额外测试提示:

  • 确保你的商品确实在WooCommerce后台开启了「允许预售」(在商品编辑页的「库存」选项中设置)。
  • 如果使用了缓存插件,记得清除缓存后再测试效果。
  • 若你有自定义产品模板,要确保模板使用了WooCommerce原生函数渲染加入购物车按钮,否则可能无法触发该逻辑。

内容的提问来源于stack exchange,提问作者Željko Ronta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:14:08