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

Ajax请求后更新购物车总额 如何触发woocommerce_calculated_total修改订单金额

实现方案

你可以按照以下3个步骤完成需求,核心逻辑是将用户选择的分期参数存入WooCommerce会话持久化,再触发结算页自动重新计算总额:

1. 新增存储分期选择的Ajax接口

新增一个独立的Ajax回调,用来接收前端传来的用户选定分期档位、对应手续费等信息,存入WooCommerce Session:

// 存储用户选择的分期信息到WC会话
add_action( 'wp_ajax_save_selected_installment', 'save_selected_installment' );
add_action( 'wp_ajax_nopriv_save_selected_installment', 'save_selected_installment' );
function save_selected_installment() {
    if ( ! isset($_REQUEST['installment_count']) || ! isset($_REQUEST['installment_fee']) ) {
        wp_send_json_error('参数缺失');
    }
    // 做参数校验和安全过滤
    $installment_count = absint($_REQUEST['installment_count']);
    $installment_fee = floatval($_REQUEST['installment_fee']);
    
    // 存入WC会话持久化
    WC()->session->set('selected_installment_count', $installment_count);
    WC()->session->set('selected_installment_fee', $installment_fee);
    
    wp_send_json_success('存储成功');
}

2. 实现总额计算逻辑

直接在woocommerce_calculated_total过滤器中读取会话中存储的分期手续费,叠加到订单总金额即可:

add_filter( 'woocommerce_calculated_total', 'custom_calculated_total', 10, 2 );
function custom_calculated_total( $total, $cart ){
    // 仅结算页、且用户已选择分期时生效
    if ( is_checkout() && ! is_wc_endpoint_url() && WC()->session->get('selected_installment_fee') ) {
        $total += floatval(WC()->session->get('selected_installment_fee'));
    }
    return $total;
}

如果你的手续费是按订单比例动态计算,也可以只存储分期数到会话,在这个过滤器中根据当前订单总额实时计算手续费即可。

3. 前端交互调整

用户选择分期档位后,先从你原有分期配置接口的返回结果中拿到对应档位的手续费,调用上面新增的接口存储参数,最后触发WooCommerce内置的update_checkout事件,就会自动重新计算购物车总额、刷新结算页金额区块:

// 假设你的分期选项按钮class为installment-item
$('.installment-item').on('click', function() {
    // 从你之前的分期配置接口返回结果中取对应参数
    const selectedCount = $(this).data('installment-count');
    const selectedFee = $(this).data('installment-fee'); 
    
    // 存储分期选择到服务端
    $.ajax({
        url: wc_checkout_params.ajax_url, // WooCommerce结算页默认全局变量
        type: 'POST',
        data: {
            action: 'save_selected_installment',
            installment_count: selectedCount,
            installment_fee: selectedFee
        },
        success: function() {
            // 触发WooCommerce结算页更新,自动执行总额计算逻辑
            $(document.body).trigger('update_checkout');
        }
    })
})

补充说明

提交订单时可以额外加校验逻辑,确认会话里的分期信息和用户提交的支付信息一致,避免数据不一致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:06:02