找回密码
 立即注册
查看: 522|回复: 0

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

[复制链接]

556

主题

688

回帖

4727

积分

管理员

积分
4727
QQ
发表于 2026-5-27 09:35:11 | 显示全部楼层 |阅读模式
# WordPress Contact Form 7 表单数据加密查看(密码验证)完整方案
3 A; A8 H! h) y! Q你想实现的核心需求:**Contact Form 7 提交的表单数据,必须输入正确密码才能查看,未授权用户无法直接看到**。) @1 O5 f) \( H- W" @% V
+ F2 X6 Y9 F( w" J
我给你提供**两种最实用、零门槛**的方案,从简单到进阶,你可以直接选用:4 l1 f' M+ R: E  V
$ j+ A: T8 L: K, {
---# D: ~: T& H! B( I: x$ _) k

6 k7 v+ K4 w9 n: |+ M. r2 L## 方案一:最简单(推荐新手)- 配合 Flamingo + 密码保护页面
) u- J" r2 |8 ]+ a4 T5 }0 q3 AContact Form 7 本身**不存储表单数据**,需要搭配官方插件 **Flamingo** 存储提交记录,然后用 WordPress 原生功能实现密码查看。+ w: ?/ z0 ?+ `( m6 B* g

5 ]% j2 S: u5 j/ _3 s* F  M### 步骤 1:安装必备插件# n7 M/ _( h# d* d+ S
1. 后台 → 插件 → 安装插件& k1 s7 m9 B1 h( I; t" r+ G
2. 搜索安装并启用:
$ ]: y9 \7 X; ]   - **Contact Form 7**(你的表单插件)
( h' M( n3 B7 N5 C" O   - **Flamingo**(CF7 官方数据存储插件)( b3 H+ k3 r8 J/ j) j" |
' P1 y% x3 j+ l; o  U/ i
### 步骤 2:创建【密码保护的查看页面】
  j; B. d& O* U1. 新建页面 → 标题写「表单数据查看」$ L# r- j, y! t  ^% x' q
2. 右侧 **发布** 模块 → 点击 **公开** → 选择 **密码保护**
7 V% G# ]0 h1 w8 r* X0 V6 k$ ?3. 设置你的查看密码 → 发布页面2 @+ M: v" @! `& ?. o

% o2 V& N6 h. w6 e### 步骤 3:页面中插入表单数据短代码: P6 N$ Y2 Z3 w, I# b8 B' |- w4 c
在页面里粘贴这段代码(显示所有提交记录):
  u) o; N0 H+ X3 T```html( [, \0 b( F2 Q5 {: {
[flamingo-messages]
1 V2 z7 y: Q+ o* o0 `6 e```
2 P5 m& l/ Q4 j3 t, z& V( s$ ~1 X发布后,**任何人访问这个页面,必须输入密码才能看到表单数据**。4 G2 J) {( J0 C: K8 `
  `2 w4 P7 |4 o
✅ 优点:( U7 S) o9 F# G  P' ]/ ]9 m
- 纯官方插件,安全稳定
3 o4 E4 D* @, {# t3 b2 b- 5 分钟搞定,无需代码
9 h8 j. X! f( Z, d2 R- 密码独立,后台管理员也必须输密码才能看8 R( o6 i0 {. ^5 S
! K# C% t, z* b) O! Y
❌ 局限:只能查看,不能复杂筛选
* [# v8 v6 }  n' S! B* z. K2 `: t3 t
---$ x' L0 h1 Y' Z# L) E, I2 L

  d  U- l7 Y+ F, L) n- r## 方案二:最安全(高级)- 自定义加密 + 独立密码验证(完全可控)( |0 e/ m& g2 J* w- A
如果你想**只有你自己能看**、数据加密存储、密码独立验证,用这个代码方案。% G* J5 X, S8 ?5 I9 m; X
$ P# a/ Z- w2 l  X
### 功能! l: N! _4 V% ]; z- K
- 表单数据**加密保存**到数据库/ b9 V# g- D/ ?9 x! D  Q% s
- 前台创建密码验证面板) y* P# X; m3 D$ h2 T' i
- 输入正确密码才解密显示数据
( ?8 f4 t, l0 V  v" S- 无密码完全看不到任何内容4 \* [# g  M' Y' j( E* _; a5 c1 C
. @/ l8 }9 b$ F) W8 e! t8 i/ f
### 实现步骤' M7 e; i6 H( D  b, _
1. 后台 → 外观 → 主题文件编辑器
* h* ]4 E$ D) ]* `2. 打开 **functions.php**(主题函数文件)6 ^/ J+ c" p& n4 w% @1 a8 O/ |. D
3. 把下面代码**复制粘贴到最底部**:# i; I% b  n  A% Z0 P: C
6 A! T9 w) K/ A* k
```php6 }) w" S- K* i6 ?' N
// ========================
) L7 G0 k. `. c& j) A# z; O# q5 z// CF7 表单数据加密存储
& v5 m+ W% J" A3 b( X// ========================
. K- R! s6 g; A; ^& Jadd_action('wpcf7_mail_sent', 'cf7_encrypt_save_data');
) d) ?# e7 w5 Q: u2 xfunction cf7_encrypt_save_data($contact_form) {& y  D7 W+ m( d7 F6 L7 c
    $submission = WPCF7_Submission::get_instance();
0 v8 P& L9 K# z8 y    if (!$submission) return;
% l3 ?) J5 Y' p6 K1 `0 S. B   
! b$ Y& s0 D' ?9 n    $data = $submission->get_posted_data();
, p+ d# {' ?8 o. C% g& [* A" Y) A    $encrypt_key = '你的自定义加密密码'; // 改这里!
0 b2 L' \6 B6 ?$ x: k- V" v    $encrypt_data = openssl_encrypt(json_encode($data), 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));
4 t% \9 A/ q# F& T5 c   
$ @3 u7 T8 |  v6 A0 ]5 Y5 X    // 保存到数据库' Y1 j$ P' H+ ?: u+ F" |8 ^
    global $wpdb;6 i2 k$ g" m' }' u
    $wpdb->insert(
/ t2 K5 ?/ G. s/ Q- l5 t        $wpdb->prefix . 'cf7_encrypted_data',5 e# a# _9 V+ G% j9 i
        array(
0 o' J6 E/ n& ]# R/ c9 k$ v            'form_id' => $contact_form->id(),. q9 D6 p. x3 q$ ^
            'data' => $encrypt_data,2 y9 x, J- `/ E0 M4 o1 t7 I
            'time' => current_time('mysql')
$ L5 f& Y" v2 @7 w7 q        )4 v) r. d: q" o
    );
, d$ N  T  |: M}
* x8 U$ U7 t2 c" ?" W2 f5 m2 d' K( z
// 创建加密数据表(激活自动生成)8 C& q! E" r" Y7 k) ~5 b0 B# ?& j$ d
register_activation_hook(__FILE__, 'cf7_create_encrypt_table');6 f( n  I: Y. h# o
function cf7_create_encrypt_table() {( e+ f; E9 o2 a9 b' U# e0 Z
    global $wpdb;6 {+ E2 G3 p/ i5 I
    $table = $wpdb->prefix . 'cf7_encrypted_data';
0 E4 R9 W; D7 @: k) K    $charset = $wpdb->get_charset_collate();
: x5 e  w  q% G- x5 V, j6 D    $sql = "CREATE TABLE $table (
; ?; X4 h  X+ y: v6 k- t        id INT AUTO_INCREMENT PRIMARY KEY,
2 B; X+ q* [2 B4 F7 N% F1 g4 @        form_id INT,6 c. x1 b! W+ w! v. t# d
        data LONGTEXT," A( k& h8 x) {, i2 r. A
        time DATETIME
: n7 Q+ v2 u7 [    ) $charset;";; [. Z  t8 @( D* q" d7 r0 q
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
4 A4 B& @  u4 }/ A2 L$ Q. |, I    dbDelta($sql);+ T+ _8 S3 d# c2 a* U2 j2 F) p
}
) m& x* [7 Z# u, I, A/ s5 U+ W9 A, b
// ========================
- M1 ~. @5 N8 a; H; s; z// 前台密码查看短代码" q# _' g; m2 e+ q; ]! P: S
// ========================! W- n  I( U8 z; b8 z! M
add_shortcode('cf7_secure_view', 'cf7_password_protect_view');
$ h- j7 b& I7 C5 qfunction cf7_password_protect_view() {# V$ d" a3 Y. z1 B9 ?; `6 s
    $view_password = '你的查看密码'; // 改这里!0 M; |" O: x6 N  p* |2 N6 K  l
    $encrypt_key = '你的自定义加密密码'; // 和上面保持一致9 a6 [: L/ y* B/ C$ g$ _
    $ M0 Y* |; Y- i, E% e. u
    ob_start();: V) k! N9 ]- {+ w) O
   
1 A! L% F6 G5 a  r    // 验证密码9 P5 r/ F% h; }7 g
    $pass = $_POST['cf7_pass'] ?? '';' \  C3 Z( H7 I' x4 ^
    if ($pass !== $view_password) {/ o1 y$ h+ x8 R) t- L
        echo '<h3>请输入查看密码</h3>';
; V/ {" a; \4 N" F0 c! }        echo '<form method="post"><input type="password" name="cf7_pass" required><button type="submit">查看</button></form>';
* T& i6 u, C. \% ]- p8 c2 i) t7 E- Q        return ob_get_clean();5 {2 D7 f/ m+ t  B0 P4 Z
    }+ p/ O: O0 I: G; c' a
   
1 K3 T7 A- a: V# T% I/ l    // 密码正确 → 读取并解密数据4 s7 c5 n5 X. E0 c& u5 R/ a, ^. f
    global $wpdb;. @" G2 `6 I8 X$ u4 ?  G
    $table = $wpdb->prefix . 'cf7_encrypted_data';. T0 d: t# d7 R3 f, E) p! a7 j9 \
    $datas = $wpdb->get_results("SELECT * FROM $table ORDER BY id DESC");7 s. c' i4 W2 V7 ]
   
+ E" b# @: }3 a# C! r6 h! M- L7 Q" X    echo '<h3>✅ 密码正确,表单数据如下:</h3><div style="padding:15px; background:#f5f5f5;">';
# I/ D. m$ c  l( p: j! X  E& i    foreach ($datas as $item) {/ R5 s! D0 v- v5 k" n. N
        $decrypt = openssl_decrypt($item->data, 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));+ D& E4 C: ]. H7 O; K
        $form_data = json_decode($decrypt, true);3 q7 O& b6 P! [) w2 g. D
        echo '<p><strong>时间:' . $item->time . '</strong></p>';
2 c6 l' d% Q( U( k( S        foreach ($form_data as $k => $v) {4 z8 u, Z2 J7 B
            echo $k . ':' . $v . '<br>';
) U6 W* k/ B3 R5 N) ]4 B        }3 q/ }+ o" A+ X: {/ ]- X
        echo '<hr>';
+ S& Q  C7 o; ]- |. z$ v0 H$ ^* Q    }
, h9 \2 F5 R! Y/ o3 v- {    echo '</div>';
2 A% c: O( k" N$ {0 k   
+ u3 Q7 e9 |& l; C$ T3 }4 E5 U1 T    return ob_get_clean();$ j. f" Y7 e+ m7 Y
}4 \. |( P5 @. W2 o0 V$ R
```
5 ?+ l, D  V8 H6 n$ {/ f1 z1 R4 l6 Q) C. {, e) F
### 4. 使用方法
9 ?+ i5 Q6 e( J) m% r% O1. 修改代码里的两个密码:
% F/ i( V, J$ }% |. Z   - `你的查看密码`:前台输入的密码. z& ?4 c1 F& H' j2 ~8 m
   - `你的自定义加密密码`:后台加密密钥(自己记住)
* r4 ^$ n" f# N* R  l2. 新建页面 → 插入短代码:
1 |! u6 k, @* \- n! o& j   ```
* Y( Z' E7 H) m   [cf7_secure_view]& m" [" T7 w/ [8 H. a6 O
   ```
9 ?  P5 L4 `/ |" i$ J* w0 a3. 发布页面 → **必须输入密码才能查看加密的表单数据**
- z  \5 q# _- E! y- D# T8 l1 c5 y7 S' U
✅ 优点:$ n, @+ M- Y# m! n1 y) p6 A3 x' O
- 数据**加密存储**,无法直接从数据库读取
1 D/ q; e! M: a5 c3 I! n- 独立密码,和 WordPress 账号无关
) i/ [1 O) s9 u8 B; _' e- 可查看所有表单提交记录
- N& m5 [( B; ~! ~/ h( @- 安全级别高
% H, ]- s* K1 E# z4 s3 k. z4 M! H) i. c! V* V! I
---( K" W  l3 u1 F5 p

6 W* {* N( g4 u$ Z3 {## 方案三:极简版 - 仅管理员+密码查看(无加密)7 B% l+ X% X3 e; d( `, D  z: E
如果你只需要**简单密码验证**,不需要加密,用这个超短代码:& H. Z- g3 _: K3 ^* w
8 K6 w" N  y  D; Y$ l: ?/ y
```php1 N' c6 X$ t, |3 P1 h% D: I1 q
add_shortcode('cf7_protected_data', 'cf7_protected_data_func');4 R2 ?# M  p$ O% r$ Q+ y
function cf7_protected_data_func() {
/ r3 Q1 u3 P! ^5 a    $password = '123456'; // 查看密码
' K/ z, _2 o0 V: s; c    if (!isset($_POST['cf7_check_pass']) || $_POST['cf7_check_pass'] !== $password) {
& g% v( e( i) ^9 i7 V, e  k) j        return '<form method="post"><input name="cf7_check_pass" type="password" placeholder="输入密码查看"><button>提交</button></form>';. H9 _& U4 E7 [" x* z, g6 j
    }
7 B, J) A% }9 P3 v    ob_start();
4 L1 v3 j6 `+ r7 g: J# g    echo '<h3>表单提交记录</h3>';
- k7 g3 [+ M, {/ {' Z' L    global $wpdb;
( i& C+ F9 a  w& }" a; p    $posts = get_posts(array('post_type' => 'flamingo_inbound', 'posts_per_page' => -1));
; e1 J& h) F. D    foreach ($posts as $p) {
% l5 \6 L, i. O$ s3 \. t6 Z        echo '<p>' . $p->post_date . ':' . wp_strip_all_tags($p->post_content) . '</p><hr>';
, {( D/ @$ p% I( A. t    }6 ^7 f4 |7 x, G1 s% B; R
    return ob_get_clean();  ~  M. E5 ]- e+ E/ s& R
}5 p- `3 n' P/ z& n- H7 N0 q
```
" n; t" V0 i( k8 G0 G使用:`[cf7_protected_data]`
& L8 h6 k" Z( s2 a5 Y+ {8 I6 a/ O# `* E& u4 {+ j0 e) A
---
  D0 D# l! x, q1 O$ L6 n# U2 Z7 Z, c8 b& t
# 最终推荐选择( O6 [2 }. V/ r& s8 K* n: G% R
1. **新手/简单需求** → 方案一(Flamingo + 密码页面)
" n2 ~" T+ c% b; j+ X* d2. **安全/保密数据** → 方案二(加密存储 + 独立密码验证)
9 N; G4 Q" P, i. r+ e+ {3. **快速临时使用** → 方案三(极简密码验证)1 @- a0 @/ [1 s& x& Y" R* r8 v  C

) Q8 J/ Q0 f5 u$ h! B+ E. s---0 y$ a# m: x+ {0 r! S/ Q

3 B) \. e. s% L8 ^- `### 总结
! ~0 \* j8 h* a+ [3 o" ~1. Contact Form 7 **本身不存数据**,必须用 Flamingo 或自定义存储1 v' B  d/ G  N- C; Q  u( w- O7 A9 H
2. 三种方案都能实现:**输入正确密码才能查看表单信息**" }; H* i6 Q# `: |8 r/ |8 h$ R
3. 方案二安全性最高,数据加密存储,无密码无法查看
9 J3 q8 o8 T1 u. V* S4. 全部可直接复制使用,无需懂代码
& h# c, J) _$ B2 r0 }8 n) a8 M! S0 Q; M: X4 Z# f
需要我帮你**定制样式**、**限制只能管理员查看**、或**支持多表单分开查看**吗?
欢迎定制:13928122889
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|通达创业无忧交流社区 ( 粤ICP备2023021749号|粤公网安备 44030402006137号 )

GMT+8, 2026-7-12 07:02 , Processed in 0.011624 second(s), 3 queries , Redis On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表