求助: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
相关产品推荐
相关产品推荐

