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

如何在WooCommerce中添加商品到购物车后隐藏/移除加入购物车按钮

解决WooCommerce添加商品后隐藏"Buy Now"按钮的问题

需求概述

需实现:单商品页面点击"Buy Now"(原加入购物车)按钮完成加购后,隐藏该按钮,且不影响商品价格、数量控件及各类商品类型(简单、可变、分组等)的正常功能。目前已完成商店页按钮跳转、按钮文字修改、短描述区添加结账表单、首页清空购物车等自定义设置。

已使用的主题与插件

  • Astra Theme 免费版
  • Snippets code Plugin
  • Custom CSS and JavaScript Plugin
  • Microthemer Plugin

已完成的自定义修改

1. 商店页面加入购物车按钮重定向

将按钮文字改为"View product"并跳转至单商品页面:

add_filter( 'woocommerce_loop_add_to_cart_link', 'replacing_add_to_cart_button', 10, 2 );
function replacing_add_to_cart_button( $button, $product  ) {
    $button_text = __("View product", "woocommerce");
    $button = '<a class="button" href="' . $product->get_permalink() . '">' . $button_text . '</a>';

    return $button;
}

2. 修改加入购物车按钮文字

将单商品页和商品归档页的"Add to cart"改为"Buy Now":

// 修改单商品页加购按钮文字
add_filter( 'woocommerce_product_single_add_to_cart_text', 'woocommerce_custom_single_add_to_cart_text' ); 
function woocommerce_custom_single_add_to_cart_text() {
    return __( 'Buy Now', 'woocommerce' );
}

// 修改商品归档页加购按钮文字
add_filter( 'woocommerce_product_add_to_cart_text', 'woocommerce_custom_product_add_to_cart_text' );  
function woocommerce_custom_product_add_to_cart_text() {
    return __( 'Buy Now', 'woocommerce' );
}

3. 短描述区添加结账表单

在商品短描述后追加WooCommerce结账表单:

add_filter('woocommerce_short_description','ts_add_text_short_descr');

function ts_add_text_short_descr($description){
  $text="[woocommerce_checkout]";
    
  return $description.$text;
}

4. 首页进入时清空购物车

用户访问首页(商店页面)时自动清空购物车:

/* 用户进入首页时清空购物车 */
add_action( 'init', 'woocommerce_clear_cart_url' );
function woocommerce_clear_cart_url() {
global $woocommerce;

if ($_SERVER['REQUEST_URI'] === '/') { 
    $woocommerce->cart->empty_cart(); 
 }
}

解决方案:添加商品后隐藏Buy Now按钮

方法1:PHP条件判断控制按钮渲染

通过检查购物车中是否存在当前商品,动态移除按钮的渲染逻辑,适用于所有商品类型。将以下代码添加到Snippets插件中:

add_action( 'woocommerce_single_product_summary', 'hide_add_to_cart_button_if_in_cart', 1 );
function hide_add_to_cart_button_if_in_cart() {
    global $product;
    
    $product_id = $product->get_id();
    
    // 遍历购物车检查当前商品是否已存在
    foreach( WC()->cart->get_cart() as $cart_item ) {
        if( $cart_item['product_id'] === $product_id ) {
            // 移除单商品页的加购按钮区域
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
            break;
        }
    }
}

方法2:JavaScript动态隐藏(适配AJAX加购场景)

针对支持AJAX无刷新加购的商品,通过监听加购事件实现按钮隐藏,同时页面加载时自动检查购物车状态。

步骤1:添加JS代码到Custom CSS and JavaScript插件的JS区域

jQuery(document).ready(function($) {
    // 监听加购成功事件,隐藏按钮
    $(document.body).on('added_to_cart', function() {
        $('.single_add_to_cart_button').hide();
    });
    
    // 页面加载时检查购物车,若当前商品已在购物车则隐藏按钮
    var productId = $('input[name="add-to-cart"]').val();
    if(productId) {
        $.ajax({
            url: wc_cart_params.ajax_url,
            type: 'POST',
            data: {
                action: 'check_product_in_cart',
                product_id: productId
            },
            success: function(response) {
                if(response == '1') {
                    $('.single_add_to_cart_button').hide();
                }
            }
        });
    }
});

步骤2:添加PHP后台处理函数到Snippets插件

add_action('wp_ajax_check_product_in_cart', 'check_product_in_cart');
add_action('wp_ajax_nopriv_check_product_in_cart', 'check_product_in_cart');
function check_product_in_cart() {
    $product_id = intval($_POST['product_id']);
    $in_cart = false;
    
    foreach( WC()->cart->get_cart() as $cart_item ) {
        if($cart_item['product_id'] == $product_id) {
            $in_cart = true;
            break;
        }
    }
    
    echo $in_cart ? '1' : '0';
    wp_die();
}

注意事项

  • 两种方法可按需选择:PHP方法兼容性强,适配所有商品类型;JS方法更适合AJAX加购的无刷新场景;
  • 测试时需覆盖简单、可变、分组等各类商品,确认价格、数量控件不受影响;
  • 若Astra主题自定义了按钮类名,需调整JS中的选择器.single_add_to_cart_button为实际类名。

内容的提问来源于stack exchange,提问作者Hatem Frere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:54:26