如何在WooCommerce购物车非空时禁用Add to Cart按钮并替换提示语?
实现购物车非空时隐藏Add to Cart按钮并替换提示语
核心代码实现
下面的代码通过WooCommerce原生钩子检测购物车状态,自动替换Add to Cart按钮为指定提示语,同时支持单个商品页面和商品列表(归档)页面:
// 替换单个商品页面的Add to Cart按钮 add_action('woocommerce_single_product_summary', 'replace_add_to_cart_when_cart_not_empty', 1); function replace_add_to_cart_when_cart_not_empty() { // 检查购物车是否有商品 if (!WC()->cart->is_empty()) { // 移除默认的Add to Cart按钮 remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30); // 插入自定义提示语 add_action('woocommerce_single_product_summary', 'show_cart_not_empty_alert', 30); } } function show_cart_not_empty_alert() { echo '<p class="cart-full-alert" style="color: #dc3232; font-weight: bold;">在添加其他商品到购物车前,请先完成当前购物车内的订单结算。</p>'; } // 替换商品列表页面的Add to Cart按钮 add_filter('woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart_when_cart_full', 10, 2); function replace_loop_add_to_cart_when_cart_full($button_html, $product) { if (!WC()->cart->is_empty()) { $button_html = '<p class="cart-full-alert" style="color: #dc3232; font-weight: bold;">在添加其他商品到购物车前,请先完成当前购物车内的订单结算。</p>'; } return $button_html; }
使用方法
- 把代码复制到当前主题的
functions.php文件末尾,或者用Code Snippets这类自定义代码插件添加(推荐用插件,避免主题更新丢失代码)。 - 如果你的主题自定义了Add to Cart按钮的显示位置,可能需要调整代码中钩子的优先级数字(比如
30),让提示语显示在原来按钮的位置。
样式自定义(可选)
如果想调整提示语的外观,删掉代码里的内联样式,把下面的CSS加到主题的自定义CSS面板:
.cart-full-alert { color: #dc3232; font-size: 16px; font-weight: 600; padding: 12px; border: 1px solid #dc3232; border-radius: 4px; background-color: #fef0f0; margin: 10px 0; }
说明
- 代码用WooCommerce原生的
WC()->cart->is_empty()方法检测购物车状态,准确可靠,支持所有产品类型。 - 同时覆盖单个商品页和商品列表页,确保顾客在任何商品页面都看不到Add to Cart按钮。
内容的提问来源于stack exchange,提问作者Petermgr
相关产品推荐
相关产品推荐

