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

如何修改Contact Form 7的action URL,仅在验证通过后提交数据?

解决方案:Contact Form 7验证通过后发送数据到Google Apps Script并跳过邮件

你之前直接替换表单action URL的方式会绕过CF7的完整验证流程,导致未通过必填项检查的提交也被发送到Google Apps Script,进而产生重复条目。正确的做法是利用CF7的wpcf7_before_send_mail钩子——这个钩子会在CF7完成所有前端+后端验证后触发,确保只有合法提交才会执行外部请求,同时可以直接跳过默认邮件发送。

完整代码

add_action('wpcf7_before_send_mail', 'wpcf7_send_to_google_apps_script');
function wpcf7_send_to_google_apps_script($contact_form) {
    // 替换为你的目标表单ID(可在WP后台表单编辑页URL中查看)
    $target_form_id = 123;
    
    // 仅处理指定表单
    if ($contact_form->id() !== $target_form_id) {
        return;
    }
    
    // 获取当前提交的表单数据
    $submission = WPCF7_Submission::get_instance();
    if (!$submission) {
        return;
    }
    $posted_data = $submission->get_posted_data();
    
    // 发送POST请求到Google Apps Script
    $gas_url = 'https://script.google.com/macros/s/REDACTED';
    wp_remote_post($gas_url, array(
        'method' => 'POST',
        'body' => $posted_data,
        'headers' => array(
            'Content-Type' => 'application/x-www-form-urlencoded',
        ),
    ));
    
    // 强制跳过CF7默认的邮件发送功能
    $contact_form->skip_mail(true);
}

关键说明

  • 钩子逻辑:wpcf7_before_send_mail是CF7验证通过后的核心触发点,只有当所有字段验证(包括必填项、格式检查等)通过后,才会执行函数内的代码。
  • 安全获取数据:通过WPCF7_Submission类获取提交数据,是CF7官方推荐的安全方式,能兼容所有表单字段类型。
  • WP内置请求函数:使用wp_remote_post而非原生curl,避免兼容性问题,同时遵循WordPress的HTTP请求规范。
  • 跳过邮件:$contact_form->skip_mail(true)直接禁用CF7默认的邮件发送,无需在后台设置中修改邮件选项。

注意事项

  1. 确保Google Apps Script已部署为允许"任何人,甚至匿名"访问,否则会出现请求权限错误。
  2. 如果表单包含文件上传字段,需要额外处理文件数据(比如获取文件临时URL后再传递给GAS)。
  3. 可添加错误日志代码(注释部分),方便排查请求失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:05:22