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

如何为Contact Form 7设置Stripe动态注册金额?

实现Contact Form 7参会人数动态计算注册费用的方法

要实现根据参会人数自动计算Stripe付款金额,需要分前端实时计算和后端验证防篡改两步操作:

一、修改表单结构并添加前端计算逻辑

  1. 调整原表单代码,新增隐藏字段存储计算后的金额,同时更新Stripe短代码的amount参数指向该字段:
<label> Name
    [text* your-name autocomplete:name] </label>

<label> Email
    [email* your-email autocomplete:email] </label>

<label> Company name
    [text* your-company autocomplete:text] </label>

<label> Number of people
    [number* number-602 min:1 "1"] </label>

<!-- 新增隐藏字段存储计算后的总金额 -->
[hidden dynamic_amount]

<!-- Stripe短代码使用隐藏字段的值作为付款金额 -->
[stripe currency:usd amount:[dynamic_amount] "Proceed to checkout" "Pay"]
  1. 添加JavaScript监听人数输入框的变化,实时计算并更新金额:
    将以下代码添加到主题的functions.php文件中,用于注册并加载自定义脚本:
add_action( 'wp_enqueue_scripts', 'cf7_dynamic_amount_script' );
function cf7_dynamic_amount_script() {
    wp_enqueue_script( 'cf7-dynamic-amount', get_stylesheet_directory_uri() . '/js/cf7-dynamic-amount.js', array('jquery'), '1.0', true );
}

随后在主题目录下创建js/cf7-dynamic-amount.js文件,写入核心计算逻辑:

jQuery(document).ready(function($) {
    // 监听人数输入框的输入/变化事件
    $('#wpcf7-number-602').on('input change', function() {
        const numberOfPeople = parseInt($(this).val()) || 1;
        const feePerPerson = 60; // 每人60美元
        const totalAmount = numberOfPeople * feePerPerson;
        // 更新隐藏字段的金额值
        $('input[name="dynamic_amount"]').val(totalAmount);
    });

    // 页面加载时初始化金额(适配默认值1)
    $('#wpcf7-number-602').trigger('change');
});

二、后端验证防止金额篡改

前端计算逻辑可被恶意修改,因此必须在后端校验提交的金额是否与参会人数匹配:
将以下代码添加到主题的functions.php文件中:

add_action( 'wpcf7_before_send_mail', 'cf7_validate_dynamic_amount' );
function cf7_validate_dynamic_amount( $contact_form ) {
    $submission = WPCF7_Submission::get_instance();
    if ( ! $submission ) return;

    $posted_data = $submission->get_posted_data();
    $numberOfPeople = isset($posted_data['number-602']) ? intval($posted_data['number-602']) : 1;
    $submittedAmount = isset($posted_data['dynamic_amount']) ? intval($posted_data['dynamic_amount']) : 0;
    $correctAmount = $numberOfPeople * 60;

    // 校验金额是否匹配,不匹配则阻止提交并提示错误
    if ( $submittedAmount !== $correctAmount ) {
        $contact_form->add_error( '金额验证失败,请重新提交表单' );
        $submission->set_status( 'validation_failed' );
    }
}

完成以上设置后,用户输入参会人数时,前端会自动计算总费用并同步到Stripe付款按钮;同时后端会校验提交的金额是否与人数对应,彻底避免恶意篡改的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:52:46