wellknow 发表于 4 天前

豆包:WordPress Contact Form 7 表单数据加密查看(密码验证)完整方案

# WordPress Contact Form 7 表单数据加密查看(密码验证)完整方案
你想实现的核心需求:**Contact Form 7 提交的表单数据,必须输入正确密码才能查看,未授权用户无法直接看到**。

我给你提供**两种最实用、零门槛**的方案,从简单到进阶,你可以直接选用:

---

## 方案一:最简单(推荐新手)- 配合 Flamingo + 密码保护页面
Contact Form 7 本身**不存储表单数据**,需要搭配官方插件 **Flamingo** 存储提交记录,然后用 WordPress 原生功能实现密码查看。

### 步骤 1:安装必备插件
1. 后台 → 插件 → 安装插件
2. 搜索安装并启用:
   - **Contact Form 7**(你的表单插件)
   - **Flamingo**(CF7 官方数据存储插件)

### 步骤 2:创建【密码保护的查看页面】
1. 新建页面 → 标题写「表单数据查看」
2. 右侧 **发布** 模块 → 点击 **公开** → 选择 **密码保护**
3. 设置你的查看密码 → 发布页面

### 步骤 3:页面中插入表单数据短代码
在页面里粘贴这段代码(显示所有提交记录):
```html

```
发布后,**任何人访问这个页面,必须输入密码才能看到表单数据**。

✅ 优点:
- 纯官方插件,安全稳定
- 5 分钟搞定,无需代码
- 密码独立,后台管理员也必须输密码才能看

❌ 局限:只能查看,不能复杂筛选

---

## 方案二:最安全(高级)- 自定义加密 + 独立密码验证(完全可控)
如果你想**只有你自己能看**、数据加密存储、密码独立验证,用这个代码方案。

### 功能
- 表单数据**加密保存**到数据库
- 前台创建密码验证面板
- 输入正确密码才解密显示数据
- 无密码完全看不到任何内容

### 实现步骤
1. 后台 → 外观 → 主题文件编辑器
2. 打开 **functions.php**(主题函数文件)
3. 把下面代码**复制粘贴到最底部**:

```php
// ========================
// CF7 表单数据加密存储
// ========================
add_action('wpcf7_mail_sent', 'cf7_encrypt_save_data');
function cf7_encrypt_save_data($contact_form) {
    $submission = WPCF7_Submission::get_instance();
    if (!$submission) return;
   
    $data = $submission->get_posted_data();
    $encrypt_key = '你的自定义加密密码'; // 改这里!
    $encrypt_data = openssl_encrypt(json_encode($data), 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));
   
    // 保存到数据库
    global $wpdb;
    $wpdb->insert(
      $wpdb->prefix . 'cf7_encrypted_data',
      array(
            'form_id' => $contact_form->id(),
            'data' => $encrypt_data,
            'time' => current_time('mysql')
      )
    );
}

// 创建加密数据表(激活自动生成)
register_activation_hook(__FILE__, 'cf7_create_encrypt_table');
function cf7_create_encrypt_table() {
    global $wpdb;
    $table = $wpdb->prefix . 'cf7_encrypted_data';
    $charset = $wpdb->get_charset_collate();
    $sql = "CREATE TABLE $table (
      id INT AUTO_INCREMENT PRIMARY KEY,
      form_id INT,
      data LONGTEXT,
      time DATETIME
    ) $charset;";
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

// ========================
// 前台密码查看短代码
// ========================
add_shortcode('cf7_secure_view', 'cf7_password_protect_view');
function cf7_password_protect_view() {
    $view_password = '你的查看密码'; // 改这里!
    $encrypt_key = '你的自定义加密密码'; // 和上面保持一致
   
    ob_start();
   
    // 验证密码
    $pass = $_POST['cf7_pass'] ?? '';
    if ($pass !== $view_password) {
      echo '<h3>请输入查看密码</h3>';
      echo '<form method="post"><input type="password" name="cf7_pass" required><button type="submit">查看</button></form>';
      return ob_get_clean();
    }
   
    // 密码正确 → 读取并解密数据
    global $wpdb;
    $table = $wpdb->prefix . 'cf7_encrypted_data';
    $datas = $wpdb->get_results("SELECT * FROM $table ORDER BY id DESC");
   
    echo '<h3>✅ 密码正确,表单数据如下:</h3><div style="padding:15px; background:#f5f5f5;">';
    foreach ($datas as $item) {
      $decrypt = openssl_decrypt($item->data, 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));
      $form_data = json_decode($decrypt, true);
      echo '<p><strong>时间:' . $item->time . '</strong></p>';
      foreach ($form_data as $k => $v) {
            echo $k . ':' . $v . '<br>';
      }
      echo '<hr>';
    }
    echo '</div>';
   
    return ob_get_clean();
}
```

### 4. 使用方法
1. 修改代码里的两个密码:
   - `你的查看密码`:前台输入的密码
   - `你的自定义加密密码`:后台加密密钥(自己记住)
2. 新建页面 → 插入短代码:
   ```
   
   ```
3. 发布页面 → **必须输入密码才能查看加密的表单数据**

✅ 优点:
- 数据**加密存储**,无法直接从数据库读取
- 独立密码,和 WordPress 账号无关
- 可查看所有表单提交记录
- 安全级别高

---

## 方案三:极简版 - 仅管理员+密码查看(无加密)
如果你只需要**简单密码验证**,不需要加密,用这个超短代码:

```php
add_shortcode('cf7_protected_data', 'cf7_protected_data_func');
function cf7_protected_data_func() {
    $password = '123456'; // 查看密码
    if (!isset($_POST['cf7_check_pass']) || $_POST['cf7_check_pass'] !== $password) {
      return '<form method="post"><input name="cf7_check_pass" type="password" placeholder="输入密码查看"><button>提交</button></form>';
    }
    ob_start();
    echo '<h3>表单提交记录</h3>';
    global $wpdb;
    $posts = get_posts(array('post_type' => 'flamingo_inbound', 'posts_per_page' => -1));
    foreach ($posts as $p) {
      echo '<p>' . $p->post_date . ':' . wp_strip_all_tags($p->post_content) . '</p><hr>';
    }
    return ob_get_clean();
}
```
使用:``

---

# 最终推荐选择
1. **新手/简单需求** → 方案一(Flamingo + 密码页面)
2. **安全/保密数据** → 方案二(加密存储 + 独立密码验证)
3. **快速临时使用** → 方案三(极简密码验证)

---

### 总结
1. Contact Form 7 **本身不存数据**,必须用 Flamingo 或自定义存储
2. 三种方案都能实现:**输入正确密码才能查看表单信息**
3. 方案二安全性最高,数据加密存储,无密码无法查看
4. 全部可直接复制使用,无需懂代码

需要我帮你**定制样式**、**限制只能管理员查看**、或**支持多表单分开查看**吗?
页: [1]
查看完整版本: 豆包:WordPress Contact Form 7 表单数据加密查看(密码验证)完整方案