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

WordPress 6.4.1中ContactForm7提交POST数据至PHP页面的问题

解决Contact Form 7表单提交到自定义PHP并保留POST数据的方案

问题分析

你之前的两种方案存在以下问题:

  • 方案1:仅修改表单action但未彻底禁用Contact Form 7(CF7)的默认邮件发送和PHP处理逻辑,导致表单仍会触发邮件,且提交行为被CF7拦截。
  • 方案2:邮件发送后通过JS重定向属于GET请求,必然丢失POST数据,无法满足需求。

正确解决方案

我们需要让CF7表单完全作为普通HTML表单提交,同时禁用CF7的默认处理逻辑,确保POST数据完整传递到ww.php。

步骤1:修改主题functions.php

添加以下代码,指定目标表单的提交地址、禁用邮件发送及CF7的JS/CSS:

// 为指定页面的目标CF7表单修改提交地址
add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url', 10, 2);
function wpcf7_custom_form_action_url($url, $form) {
    $target_post_id = 1857; // 你的目标文章ID
    $target_form_id = 1856; // 你的CF7表单ID
    
    global $post;
    if ($post->ID === $target_post_id && $form->id() === $target_form_id) {
        return home_url('/ww.php'); // 确保路径正确,自动适配域名
    }
    return $url;
}

// 禁用目标CF7表单的邮件发送
add_filter('wpcf7_skip_mail', 'wpcf7_disable_mail_for_specific_form', 10, 2);
function wpcf7_disable_mail_for_specific_form($skip, $form) {
    $target_form_id = 1856;
    if ($form->id() === $target_form_id) {
        return true; // 跳过邮件发送流程
    }
    return $skip;
}

// 禁用CF7的JS(避免前端拦截表单提交)
add_filter('wpcf7_load_js', '__return_false');
// 可选:禁用CF7默认样式,如果不需要的话
add_filter('wpcf7_load_css', '__return_false');

步骤2:编写ww.php处理逻辑

在你的WordPress根目录创建ww.php,处理POST数据并通过Curl发送到WhatsApp(以下以WhatsApp Cloud API为例,你可根据实际需求调整):

<?php
// 仅允许POST请求
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    exit('无效请求');
}

// 读取并清洗CF7表单数据(字段名需与你的CF7表单字段一致)
$name = isset($_POST['your-name']) ? sanitize_text_field($_POST['your-name']) : '';
$email = isset($_POST['your-email']) ? sanitize_email($_POST['your-email']) : '';
$message = isset($_POST['your-message']) ? sanitize_textarea_field($_POST['your-message']) : '';

// 构建WhatsApp消息内容
$whatsapp_content = "新表单提交通知:\n姓名:{$name}\n邮箱:{$email}\n留言:{$message}";

// WhatsApp Cloud API配置(替换为你的实际信息)
$api_url = 'https://graph.facebook.com/v18.0/你的电话号码ID/messages';
$access_token = '你的API访问令牌';
$recipient = '+8613xxxxxxxxx'; // 处理人员的WhatsApp号码(带国家码)

// 准备请求参数
$payload = json_encode([
    'messaging_product' => 'whatsapp',
    'to' => $recipient,
    'text' => ['body' => $whatsapp_content]
]);

// 初始化Curl请求
$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    "Authorization: Bearer {$access_token}"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 执行请求并处理响应
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);

// 处理结果:可跳转到感谢页面或显示提示
if ($error) {
    echo "发送失败:{$error}";
} else {
    header('Location: ' . home_url('/thank-you/')); // 替换为你的感谢页面地址
    exit;
}
?>

注意事项

  • 确保CF7表单的字段名与ww.php中读取的$_POST键名完全一致(比如CF7里的[text* your-name]对应$_POST['your-name'])。
  • 如果使用第三方WhatsApp服务,需根据其API文档调整Curl请求逻辑。
  • 测试时可在ww.php中先打印var_dump($_POST)确认数据是否正常接收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:57:05