|
|
# 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
需要我帮你**定制样式**、**限制只能管理员查看**、或**支持多表单分开查看**吗? |
|