如何根据WooCommerce产品库存状态隐藏询价按钮?
解决WooCommerce预售产品仅显示询价按钮的问题
针对你使用Product_Enquiry_For_Woocommerce插件的需求——仅在可预售(backorder)且无库存的产品单品页面显示询价按钮,以下是两种可行方案:
一、PHP钩子控制(推荐,从根源控制按钮输出)
你之前的代码错误在于使用了不相关的钩子,且remove_action的调用方式不正确。正确的做法是先移除插件默认的按钮动作,再根据产品条件重新添加:
// 移除插件默认的询价按钮动作 add_action('init', 'custom_remove_default_enquiry_button'); function custom_remove_default_enquiry_button() { // 获取插件实例 $enquiry_plugin = Product_Enquiry_For_Woocommerce::instance(); // 移除插件绑定的按钮动作(需匹配插件实际使用的钩子和回调方法) // 通常插件会用woocommerce_single_product_summary钩子,回调为show_enquiry_button,优先级10 remove_action('woocommerce_single_product_summary', array($enquiry_plugin, 'show_enquiry_button'), 10); } // 按条件重新添加询价按钮 add_action('woocommerce_single_product_summary', 'custom_add_conditional_enquiry_button', 10); function custom_add_conditional_enquiry_button() { global $product; // 仅当产品可预售且无库存时,显示询价按钮 if ($product->is_on_backorder() && !$product->is_in_stock()) { $enquiry_plugin = Product_Enquiry_For_Woocommerce::instance(); $enquiry_plugin->show_enquiry_button(); } }
注意事项:
- 如果不确定插件实际使用的钩子和回调方法,可以打开插件的
class-product-enquiry-for-woocommerce.php文件,搜索add_action关键字,找到绑定询价按钮的代码行(格式类似add_action('钩子名', array($this, '回调方法名'), 优先级);) - 确保代码添加到主题的
functions.php文件中
二、CSS条件隐藏(备用方案)
如果PHP钩子方法难以匹配插件的实际动作,可以用CSS根据产品条件隐藏按钮:
add_action('wp_head', 'custom_enquiry_button_conditional_css'); function custom_enquiry_button_conditional_css() { global $product; // 仅在单品页面生效 if (!is_product()) return; // 当产品不可预售或有库存时,隐藏询价按钮 if (!$product->is_on_backorder() || $product->is_in_stock()) { echo '<style>.pe-show-enq-modal { display: none !important; }</style>'; } }
这个方法通过动态输出CSS,仅在不符合条件的产品页面隐藏按钮,适合快速实现需求。
内容的提问来源于stack exchange,提问作者noliveira
相关产品推荐
相关产品推荐

