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

WooCommerce特定分类添加「立即试用」按钮及定制结账页需求

我来帮你梳理并完善实现这个需求的完整方案,结合你提到的代码片段,我们分几个核心步骤来落地:


第一步:给指定分类添加「立即试用」按钮

先完善你提到的移除默认加购按钮、添加自定义试用按钮的逻辑,精准控制仅目标分类显示该按钮:

// 移除产品列表页默认加入购物车按钮(仅目标分类生效)
add_action( 'woocommerce_before_shop_loop_item', 'remove_loop_add_to_cart_button', 1 );
function remove_loop_add_to_cart_button(){
    // 替换成你需要设置的目标分类ID,多个分类用数组比如 array(10, 15, 20)
    $target_category_ids = array(10);
    global $product;
    
    // 检查当前产品是否属于目标分类
    if( has_term( $target_category_ids, 'product_cat', $product->get_id() ) ){
        remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
        // 挂载自定义「立即试用」按钮
        add_action( 'woocommerce_after_shop_loop_item', 'render_trial_checkout_button', 10 );
    }
}

// 输出「立即试用」按钮,跳转至定制结账页并携带产品ID参数
function render_trial_checkout_button(){
    global $product;
    // 这里替换为你创建的定制结账页的slug(比如后台新建页面slug设为custom-trial-checkout)
    $checkout_page = get_page_by_path( 'custom-trial-checkout' );
    if( $checkout_page ){
        $checkout_url = add_query_arg( 
            'trial_product_id', 
            $product->get_id(), 
            get_permalink( $checkout_page->ID ) 
        );
        echo '<a href="' . esc_url( $checkout_url ) . '" class="button trial-checkout-btn">立即试用</a>';
    }
}

第二步:定制结账页核心逻辑(数量限制/固定总价/支付方式限制)

首先在WordPress后台新建一个页面,命名为「试用专属结账」,页面slug设置为custom-trial-checkout,页面内容插入短码[woocommerce_checkout]。然后添加以下代码处理核心规则:

// 试用结账页专属逻辑初始化
add_action( 'woocommerce_before_checkout_form', 'init_trial_checkout_rules' );
function init_trial_checkout_rules(){
    if( !is_page( 'custom-trial-checkout' ) || !isset( $_GET['trial_product_id'] ) ){
        return;
    }

    $trial_product_id = absint( $_GET['trial_product_id'] );
    $max_trial_qty = 5; // 最多5件试用商品
    $fixed_total = 500; // 固定总价

    // 清空购物车,确保仅加载试用商品
    WC()->cart->empty_cart();
    // 默认添加1件试用商品
    WC()->cart->add_to_cart( $trial_product_id, 1 );

    // 挂载后续规则钩子
    add_filter( 'woocommerce_quantity_input_max', 'limit_trial_product_max_qty', 10, 2 );
    add_action( 'woocommerce_calculate_totals', 'force_fixed_trial_total' );
    add_filter( 'woocommerce_available_payment_gateways', 'only_allow_bank_payment' );
}

// 限制试用商品最大购买数量为5
function limit_trial_product_max_qty( $max_qty, $product ){
    if( is_page( 'custom-trial-checkout' ) ){
        return 5;
    }
    return $max_qty;
}

// 强制试用订单总价固定为500,清空所有额外费用
function force_fixed_trial_total( $cart ){
    if( is_page( 'custom-trial-checkout' ) && !$cart->is_empty() ){
        $cart->subtotal = 500;
        $cart->total = 500;
        // 移除税费、运费、服务费等所有额外项
        $cart->tax_total = 0;
        $cart->shipping_total = 0;
        $cart->fee_total = 0;
    }
}

// 仅保留银行卡支付方式(默认银行转账网关ID为bacs,若用第三方支付插件需替换为对应ID)
function only_allow_bank_payment( $available_gateways ){
    if( is_page( 'custom-trial-checkout' ) ){
        $allowed_gateway = array( 'bacs' );
        foreach( $available_gateways as $gateway_id => $gateway ){
            if( !in_array( $gateway_id, $allowed_gateway ) ){
                unset( $available_gateways[$gateway_id] );
            }
        }
    }
    return $available_gateways;
}

第三步:可选样式优化(给「立即试用」按钮加专属样式)

如果需要区分试用按钮和默认加购按钮,可添加以下CSS到主题自定义CSS面板:

.trial-checkout-btn {
    background-color: #27ae60;
    color: #fff;
    margin-left: 8px;
}
.trial-checkout-btn:hover {
    background-color: #2ecc71;
}

注意事项

  1. 请先测试完整流程:从产品列表点击「立即试用」→ 进入结账页调整数量(最多5件)→ 确认总价固定500 → 仅显示银行卡支付选项
  2. 若目标分类用slug而非ID,可将has_term的第一个参数替换为分类slug,比如has_term( 'trial-products', 'product_cat', $product->get_id() )
  3. 建议将代码添加到子主题functions.php或自定义代码插件中,避免主题更新丢失代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:13:44