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

如何为已购买指定商品的WooCommerce用户移除加购按钮,限制单用户单商品仅购一次

WooCommerce 单用户单商品仅允许购买一次实现方案

实现逻辑说明

woocommerce_is_purchasable是WooCommerce提供的原生过滤器钩子,核心逻辑是当用户访问商品页时,校验当前登录用户是否已经购买过该商品,若已购买则返回false,WooCommerce会自动隐藏/禁用加入购物车按钮,无需额外修改前端模板。

具体实现步骤

步骤1:插入校验代码

你可以将以下代码添加到当前使用的WooCommerce主题/子主题的functions.php文件末尾,也可以通过自定义代码片段插件插入,避免主题更新后代码被覆盖:

add_filter( 'woocommerce_is_purchasable', 'limit_one_purchase_per_user', 10, 2 );
function limit_one_purchase_per_user( $is_purchasable, $product ) {
    // 仅对登录用户做校验,未登录用户默认可购买(可根据需求调整规则)
    if ( ! is_user_logged_in() ) {
        return $is_purchasable;
    }

    $current_user_id = get_current_user_id();
    $product_id = $product->get_id();

    // 查询当前用户是否有包含该商品的有效订单
    $customer_orders = wc_get_orders( array(
        'customer_id' => $current_user_id,
        'status' => array( 'completed', 'processing' ), // 可自定义需要校验的订单状态
        'limit' => 1,
        'return' => 'ids',
    ) );

    foreach ( $customer_orders as $order_id ) {
        $order = wc_get_order( $order_id );
        foreach ( $order->get_items() as $item ) {
            if ( $item->get_product_id() == $product_id ) {
                // 已购买过该商品,标记为不可购买
                $is_purchasable = false;
                break 2;
            }
        }
    }

    return $is_purchasable;
}

步骤2:添加提示文案(可选)

默认禁用按钮后不会展示限制原因,你可以添加以下代码在商品页显示自定义提示:

add_action( 'woocommerce_single_product_summary', 'show_purchase_limit_notice', 20 );
function show_purchase_limit_notice() {
    global $product;
    if ( ! is_user_logged_in() || $product->is_purchasable() ) {
        return;
    }
    echo '<div class="woocommerce-info">您已经购买过该商品,每个用户仅限购买一次。</div>';
}

注意事项

  • 如果你需要把待付款、已付款等其他订单状态也纳入校验范围,直接修改代码中status参数的数组值即可
  • 上述代码默认按商品维度限制购买,如果你需要按变体维度限制,把$item->get_product_id()改为$item->get_variation_id()即可
  • 修改functions.php前建议先备份文件,避免语法错误导致站点无法访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:36:01