|
|
# WordPress Contact Form 7 表单数据加密查看(密码验证)完整方案. j' j! w$ n/ g( l9 a h P
你想实现的核心需求:**Contact Form 7 提交的表单数据,必须输入正确密码才能查看,未授权用户无法直接看到**。
/ I+ O' k* S1 Y8 x% J! ]0 G3 H/ ~5 W, A, t6 D$ w0 |9 I
我给你提供**两种最实用、零门槛**的方案,从简单到进阶,你可以直接选用:+ v$ m" y# h* H2 k
: h% ]: ~- ^( t8 T* U7 U5 H
---
8 v& U! C7 X$ ]
( R( G5 O6 A/ A## 方案一:最简单(推荐新手)- 配合 Flamingo + 密码保护页面' ?( O! ~% p# F8 S: K
Contact Form 7 本身**不存储表单数据**,需要搭配官方插件 **Flamingo** 存储提交记录,然后用 WordPress 原生功能实现密码查看。
7 i. _# Q- _* R( i& ^
* v: B5 m* W$ ^5 l) K5 I( k### 步骤 1:安装必备插件
6 [2 `& L" m }& y/ T- F9 X/ _) x2 @1. 后台 → 插件 → 安装插件; J' ^+ a6 D* L
2. 搜索安装并启用:
' _- M6 x, W3 Q9 w. B& E - **Contact Form 7**(你的表单插件)
4 d7 u7 j% u. A# | - **Flamingo**(CF7 官方数据存储插件)
y* A' n) Q% s+ U- p4 Q9 Z
' S4 K# | T/ I, c$ G### 步骤 2:创建【密码保护的查看页面】
/ i& c$ G! @' `* \- B1. 新建页面 → 标题写「表单数据查看」. U( f( v; v3 W# N( ^& `$ m" x. Z
2. 右侧 **发布** 模块 → 点击 **公开** → 选择 **密码保护**& w# [* N Z, o( e" f+ N* t
3. 设置你的查看密码 → 发布页面* X6 Z, r4 H& u% N) }/ X1 F: e
5 _9 E! \0 u: z5 I### 步骤 3:页面中插入表单数据短代码
$ _/ a! t0 H! X# s1 W在页面里粘贴这段代码(显示所有提交记录):/ z5 B+ k0 R- t
```html( H4 g( t" v4 [: y. A6 I1 ]
[flamingo-messages]
: g- q) W; d/ K: ?) O% }. I0 S```8 e D0 U2 @; a
发布后,**任何人访问这个页面,必须输入密码才能看到表单数据**。% |7 _* b& C# }
9 [' T+ O5 c( s- z✅ 优点:6 \/ F* T: W! s7 A; ~5 I. D
- 纯官方插件,安全稳定
: o$ P, K/ n% M5 ~- 5 分钟搞定,无需代码4 B4 o+ g6 @9 @
- 密码独立,后台管理员也必须输密码才能看8 w9 l7 t- P6 x9 ?+ x1 o
" C+ e, S6 ^2 y( t2 u) V6 R❌ 局限:只能查看,不能复杂筛选9 m$ m$ k- N$ U
' N* B# ]7 a B+ d---; A6 R" }8 X1 O3 Q
) y: d5 }* k0 @" X8 T$ l9 H u
## 方案二:最安全(高级)- 自定义加密 + 独立密码验证(完全可控)6 V4 ]9 c, f9 s" U9 I
如果你想**只有你自己能看**、数据加密存储、密码独立验证,用这个代码方案。
/ l6 `* a( N- F! }' Z, \8 [$ K* g, T1 J
### 功能
$ |8 H6 N/ [% @- 表单数据**加密保存**到数据库* N7 B$ Z9 ?* m$ i+ H
- 前台创建密码验证面板
$ o' U/ l' y/ a- 输入正确密码才解密显示数据
8 H# O% b$ d% n3 E9 s- 无密码完全看不到任何内容
0 n& e, r6 j; Y- p1 I
; P$ P" C: h( J$ h8 D### 实现步骤
2 B( g9 x" U0 l/ z3 S1. 后台 → 外观 → 主题文件编辑器9 S% X" ~; z: i' e$ X s
2. 打开 **functions.php**(主题函数文件)$ m- Q ~" n% P
3. 把下面代码**复制粘贴到最底部**:
3 e" F7 ^8 `' k e
! q9 @. b; r2 E* _3 i( `' [* K) x```php
6 b) F; N# N+ M$ c* R A; O// ========================/ O' W5 Q2 E, B/ _0 L5 n# d H
// CF7 表单数据加密存储0 ?$ M: d: o8 W* t1 y( g
// ========================
& b8 U9 T6 d8 C" s& E madd_action('wpcf7_mail_sent', 'cf7_encrypt_save_data');3 _% Z. B& |- u& M) g
function cf7_encrypt_save_data($contact_form) {
; K2 k* F. e; r' r B- Y, | $submission = WPCF7_Submission::get_instance();
5 B* H; z1 q7 u: t: h; n" Z if (!$submission) return;
; ]% F7 T4 A7 p2 d0 C4 P" g4 P 5 M" O" g! _" _/ r# o2 r& f
$data = $submission->get_posted_data();9 A6 v. A4 ^% L" B) n
$encrypt_key = '你的自定义加密密码'; // 改这里!- d4 v( @3 }9 `. C
$encrypt_data = openssl_encrypt(json_encode($data), 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));
& l0 D, M% O. x0 x8 c$ o# j z6 T ! X9 P9 D1 ^9 Y$ G$ b
// 保存到数据库/ t+ m: G2 c/ r" Y8 i5 I
global $wpdb;
. i0 R9 F! v$ K: }" ]1 L- I $wpdb->insert(; m9 E7 ^5 d2 T9 p, G7 N$ p: H
$wpdb->prefix . 'cf7_encrypted_data',
+ }0 Q& O7 c3 F array(
, |( k7 y+ D9 E% @" B [; l- g 'form_id' => $contact_form->id(),
9 @. |; B z8 l$ y 'data' => $encrypt_data,( F8 [/ j- }4 q/ C: K: n
'time' => current_time('mysql')$ S' u4 |) x5 P1 ?6 _
); e4 x) X2 I4 B9 G" j! Q
);+ N. g4 T/ o8 K
}. q) _, Q! G x1 c7 Y* a
+ C/ i! ]. N; ^, [1 n& \// 创建加密数据表(激活自动生成)3 ?. i% D& j, k- _( s0 s% k
register_activation_hook(__FILE__, 'cf7_create_encrypt_table');
. n( P6 e# P8 A/ `$ u% Mfunction cf7_create_encrypt_table() {/ \/ Q; R5 j9 x2 t2 X$ T
global $wpdb;
/ k. w. F# m( @+ [9 m; X $table = $wpdb->prefix . 'cf7_encrypted_data';& U; J- ~2 Z" G6 {
$charset = $wpdb->get_charset_collate();7 _; z3 b. [/ z
$sql = "CREATE TABLE $table (
7 S& s5 o8 B: R; r2 g4 b id INT AUTO_INCREMENT PRIMARY KEY,
9 C( D) ^# z' X% b& J$ p: O/ v form_id INT,
( D# `/ R/ B. p3 L& G4 h8 F data LONGTEXT,
+ `/ {8 k3 M' _0 I* s- L time DATETIME
4 ^+ K0 ~- c% M+ @ ) $charset;";5 k1 k v4 D+ u# p9 O+ j1 {
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
_9 D% Q5 Q, r# |3 Q dbDelta($sql);
" x: H' \! Z9 T$ Z3 _9 @2 p% J}
9 T$ A1 F4 ]- O7 S( z, U5 n5 @; `+ ]6 x
// ========================- o( m+ i% |1 i3 x* I0 `
// 前台密码查看短代码
7 N- n5 P8 G: C& F1 T4 p8 f- l// ========================' T8 w* @3 r1 g" ]1 L$ P
add_shortcode('cf7_secure_view', 'cf7_password_protect_view');
; |7 u2 [5 `# g' v( ofunction cf7_password_protect_view() {
0 P8 b5 d( ]' P: m3 Y $view_password = '你的查看密码'; // 改这里!
3 Z) t$ M \ H& t' j $encrypt_key = '你的自定义加密密码'; // 和上面保持一致
& V" q a9 F7 A3 `* s
0 }' V0 s1 D$ K0 c* ^. r% f8 y6 m9 A ob_start();; y* p& l! h: |- S/ k9 X
, D, z) t0 h# A9 o- i$ I/ V Y // 验证密码- {3 j) N% q2 I2 g
$pass = $_POST['cf7_pass'] ?? '';
% ^- W2 L" H$ Z& ]* v$ z if ($pass !== $view_password) {( ~$ [9 [0 m. ^9 O+ q; W, m$ v- W
echo '<h3>请输入查看密码</h3>';! v2 ~( i- a4 X
echo '<form method="post"><input type="password" name="cf7_pass" required><button type="submit">查看</button></form>';
9 _9 T9 u: A6 u' M0 M return ob_get_clean();
* b, d$ v2 l8 |$ F2 f9 E }
9 F7 z; i7 h6 k0 K9 p 2 t0 q6 f3 l5 W/ d: r
// 密码正确 → 读取并解密数据( K7 z/ J1 q6 _3 X8 J" G
global $wpdb;
0 M/ i( o( A" a' u8 N' B $table = $wpdb->prefix . 'cf7_encrypted_data';
8 B% [* i3 Z9 ^ $datas = $wpdb->get_results("SELECT * FROM $table ORDER BY id DESC");( W& l; j) K% t7 q- y
# a! c6 q0 c* N0 M8 s4 U7 @9 C echo '<h3>✅ 密码正确,表单数据如下:</h3><div style="padding:15px; background:#f5f5f5;">';
# ]8 L, H- u3 [+ r5 g6 C. O foreach ($datas as $item) {8 N6 K4 R/ a' B% g8 p8 D1 U! o2 o
$decrypt = openssl_decrypt($item->data, 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));& B: ^, E8 j/ O1 L6 J+ v8 i0 i$ g
$form_data = json_decode($decrypt, true); h& \; I& F* V, _/ Q( H
echo '<p><strong>时间:' . $item->time . '</strong></p>';5 ~# J7 n6 ]- }4 Q( v
foreach ($form_data as $k => $v) {
7 A( |/ A6 R/ b: u# T' m0 } echo $k . ':' . $v . '<br>';4 c8 W- H3 g' m$ h* e, p7 A
}1 g% C: t6 o8 }& B8 G
echo '<hr>';2 l& C: N* i. @
}
; \2 w& Y. n: j( |# s) C6 V echo '</div>';
^, r4 |2 C0 X; P8 [
2 }5 L! ~' K4 T+ n8 s8 m6 F return ob_get_clean();
* C' G( M& w5 W4 [9 C3 y1 e g# B. v}! g% X' F8 r) \
```
6 R* j, k, l6 a# e9 i; n6 \" i# i% E, A1 Q/ n: V
### 4. 使用方法
! B9 d' t- }# G0 L# F1. 修改代码里的两个密码:
. t* t/ r7 ~+ i3 L* h2 c# F - `你的查看密码`:前台输入的密码
4 P# v" L$ {) v6 k& _, x5 x- e - `你的自定义加密密码`:后台加密密钥(自己记住)9 T( m2 `6 w+ K8 P& y
2. 新建页面 → 插入短代码:
+ B' o k% K1 M3 [ u ```/ {1 R7 W/ e% Z6 g! ~5 G: T& n
[cf7_secure_view]5 a6 O4 C2 o5 l, S' r+ D- ~
```( h8 k% F) b7 [, u
3. 发布页面 → **必须输入密码才能查看加密的表单数据**- Z i; k4 f- g' F
& N$ ]% g& \4 }1 d6 P# t
✅ 优点:
9 J: N ~) s. G7 k2 p0 ]0 o6 X7 s- 数据**加密存储**,无法直接从数据库读取
& {0 ^, r' R; Y1 a) H4 r* C- 独立密码,和 WordPress 账号无关
8 z3 Y. h0 G+ ^& m1 J; E- 可查看所有表单提交记录
: u) O$ w8 ]; V( E- 安全级别高
8 b, ~3 B2 v; i Q
0 z* {- ^- [2 t. G2 l+ g---# H6 _* M, Y3 N7 A6 B( E3 }
/ ]" j: [# ^9 |* j
## 方案三:极简版 - 仅管理员+密码查看(无加密)
, V' j' \' v4 H0 d0 I$ K如果你只需要**简单密码验证**,不需要加密,用这个超短代码:& ~/ B( s' m# I: t7 f' o$ Y. s
# E( ^6 e% Q' X0 ~0 s( z0 q```php0 c8 k! E; ^3 y- v% p
add_shortcode('cf7_protected_data', 'cf7_protected_data_func');
+ w# x( ^ c1 n3 Nfunction cf7_protected_data_func() {
' Q' i, P# b- v7 [3 g2 P $password = '123456'; // 查看密码
7 J; J% L }& e$ r7 B- T; w, q7 x if (!isset($_POST['cf7_check_pass']) || $_POST['cf7_check_pass'] !== $password) {
- | p* X( Y) Y/ { return '<form method="post"><input name="cf7_check_pass" type="password" placeholder="输入密码查看"><button>提交</button></form>';
5 u3 D8 U' U f- G4 } }) n$ O: C5 F6 R7 p, U& }! k2 n
ob_start();$ U _! Q+ K9 B, c
echo '<h3>表单提交记录</h3>';
3 V; Z% h9 S; H/ U' [" x* I6 X global $wpdb;
: d3 w# t0 g0 O/ Z. c) f' h4 @ $posts = get_posts(array('post_type' => 'flamingo_inbound', 'posts_per_page' => -1));
5 ?) i6 m# r g9 [ foreach ($posts as $p) {
9 E ~4 f) Q' R/ Q$ o echo '<p>' . $p->post_date . ':' . wp_strip_all_tags($p->post_content) . '</p><hr>';
5 y- A, l' X( f( v$ c# M m" H }2 i* r/ W6 t T8 n1 Z: L4 k q
return ob_get_clean();
% u F: u- W9 f& ], Z! Z}
) Y+ k! i& X' ^# K, T```! k3 n6 }, E8 N0 F0 r1 Y
使用:`[cf7_protected_data]`* |/ z7 I6 x: {" F. F- p
Q- O. V7 o. N* k
---4 Z* ? b% `9 `+ g; J3 J9 w8 q
. D; O0 c. K1 v' g' X4 _/ c# 最终推荐选择6 x+ w$ `7 X- ]1 [+ {4 p& H
1. **新手/简单需求** → 方案一(Flamingo + 密码页面): p( i5 e% _5 ~8 j& q
2. **安全/保密数据** → 方案二(加密存储 + 独立密码验证)
! X- ^% t! U2 m) R3. **快速临时使用** → 方案三(极简密码验证)8 b* O# C+ F8 K! u3 `
$ o" o3 ]4 q0 e) i2 x# z1 f$ n---
4 x+ I g- ^8 q6 l, G/ t! K. H! f1 X. f& l4 o* u: z$ c- U
### 总结- y2 {0 t' k5 `& [* C7 T
1. Contact Form 7 **本身不存数据**,必须用 Flamingo 或自定义存储( Q& h6 @- i; n2 `$ J, A
2. 三种方案都能实现:**输入正确密码才能查看表单信息**9 `+ Q# l% H/ }" u6 J
3. 方案二安全性最高,数据加密存储,无密码无法查看5 |& @' M* {7 T$ N# k5 S& J
4. 全部可直接复制使用,无需懂代码
4 _; ] l' ^0 g. {+ X# t: R4 M2 Z. j. P1 S; B! Y4 d
需要我帮你**定制样式**、**限制只能管理员查看**、或**支持多表单分开查看**吗? |
|