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

WooCommerce可变产品如何禁用用户已购商品的加入购物车选项

WooCommerce可变产品购买后禁用加购解决方案(适配Martfury主题)

你当前简单产品功能正常、可变产品失效,核心原因是常规的购买校验钩子仅覆盖了简单产品类型,未对可变产品的变体单独做校验,Martfury主题遵循WooCommerce核心钩子规范,按以下步骤操作即可实现需求:


实现步骤

  • 第一步:将以下代码添加到WordPress站点子主题的functions.php文件,或使用Code Snippets这类自定义代码插件插入(不要直接修改父主题文件,避免主题更新后代码被覆盖)
// 校验用户是否已购买指定产品(含可变产品变体)
function custom_user_has_bought_product( $product_id ) {
    if ( ! is_user_logged_in() ) return false;
    $user_id = get_current_user_id();
    // 可根据需求调整订单状态,此处仅校验已完成订单
    $statuses = array( 'wc-completed' );
    $customer_orders = wc_get_orders( array(
        'customer_id' => $user_id,
        'status' => $statuses,
        'return' => 'ids',
    ) );
    foreach ( $customer_orders as $order_id ) {
        $order = wc_get_order( $order_id );
        foreach ( $order->get_items() as $item ) {
            // 若买过任意变体就禁用整个可变产品,把下方$product_id换成$item->get_product_id()即可
            if ( in_array( $product_id, array( $item->get_product_id(), $item->get_variation_id() ) ) ) {
                return true;
            }
        }
    }
    return false;
}

// 覆盖简单产品可购买性判断
add_filter( 'woocommerce_is_purchasable', 'custom_disable_add_to_cart_after_purchase', 10, 2 );
// 覆盖可变产品变体可购买性判断(解决可变产品失效的核心逻辑)
add_filter( 'woocommerce_variation_is_purchasable', 'custom_disable_add_to_cart_after_purchase', 10, 2 );
function custom_disable_add_to_cart_after_purchase( $is_purchasable, $product ) {
    if ( custom_user_has_bought_product( $product->get_id() ) ) {
        return false;
    }
    return $is_purchasable;
}

// 自定义不可购买时的按钮提示文本
add_filter( 'woocommerce_product_add_to_cart_text', 'custom_purchased_product_button_text', 10, 2 );
function custom_purchased_product_button_text( $text, $product ) {
    if ( custom_user_has_bought_product( $product->get_id() ) ) {
        return __( '已购买', 'woocommerce' );
    }
    return $text;
}
  • 第二步:根据需求调整校验逻辑:
    • 若需要用户购买任意变体就禁用整个可变产品的所有加购选项,按代码中的注释修改对应判断逻辑即可
    • 若需要校验包含处理中、待发货等状态的订单,修改$statuses数组新增对应状态值即可,例如新增'wc-processing'
  • 第三步:清理站点缓存(包括页面缓存、WooCommerce对象缓存)后测试可变产品效果即可

若添加代码后可变产品仍未生效,可检查Martfury主题的「产品页设置」中是否开启了自定义加购按钮功能,关闭自定义选项即可兼容默认WooCommerce钩子逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:42:03