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

