|
|
# WordPress Contact Form 7 表单数据加密查看(密码验证)完整方案
% s# n8 x7 N$ `, A) o- @5 \你想实现的核心需求:**Contact Form 7 提交的表单数据,必须输入正确密码才能查看,未授权用户无法直接看到**。
4 \( m1 D- p0 W2 p+ x9 P' i
3 t% |( b6 i' \$ A我给你提供**两种最实用、零门槛**的方案,从简单到进阶,你可以直接选用:" I5 d9 @9 }. e7 K7 C, ]3 U
2 V/ f- ~# F9 L' e& q9 ^3 ~---5 j+ p6 u# J1 v9 H0 `0 X
F, Y9 m8 u* Q5 f
## 方案一:最简单(推荐新手)- 配合 Flamingo + 密码保护页面5 P1 }1 A) i- l0 C
Contact Form 7 本身**不存储表单数据**,需要搭配官方插件 **Flamingo** 存储提交记录,然后用 WordPress 原生功能实现密码查看。& v! v4 b( ^* F4 A+ f
1 @5 f+ q9 t8 b9 n2 |
### 步骤 1:安装必备插件$ D; ?( X N. U
1. 后台 → 插件 → 安装插件% ^* e+ W: Q- N. Z
2. 搜索安装并启用:2 s' F3 v" W/ Y9 ?
- **Contact Form 7**(你的表单插件)5 H2 O2 D, f; d# G+ E5 T9 L
- **Flamingo**(CF7 官方数据存储插件)% a/ f _$ X" |$ t6 ~# a; _
, H! Y5 F$ W8 R* S& b* G
### 步骤 2:创建【密码保护的查看页面】" C V( C7 v: @% \' d% D! ~
1. 新建页面 → 标题写「表单数据查看」/ G" s* \3 Q4 d, q7 Y2 x; D
2. 右侧 **发布** 模块 → 点击 **公开** → 选择 **密码保护**
& O: \1 j" E, ^. w) t4 p5 _3. 设置你的查看密码 → 发布页面, I8 O& N, u* A
/ L; `* b0 ^% t+ |3 V6 k9 ?
### 步骤 3:页面中插入表单数据短代码
' [6 Y( V5 L; [! Q在页面里粘贴这段代码(显示所有提交记录):0 X# x1 L2 J6 @: \$ p- i
```html* G& c& p6 M, |3 L3 o
[flamingo-messages]. q ^' z0 y7 Y/ K& k
```
& }' X, n! c* U# P( q4 M( J发布后,**任何人访问这个页面,必须输入密码才能看到表单数据**。
& F, ?# u: @- m4 E+ [" ?$ N% ?6 I3 j0 X' k0 X9 t. c
✅ 优点:; Q: W9 r b; W' L* ]
- 纯官方插件,安全稳定
! E7 @ P( I% \, k% l; ~) Z- 5 分钟搞定,无需代码2 R4 _; ?6 E: d2 K: H' I0 z
- 密码独立,后台管理员也必须输密码才能看/ l2 i3 h& U- @5 r
! G% N3 }# V7 M8 R5 g- y* M! o* d
❌ 局限:只能查看,不能复杂筛选
0 m$ `0 W0 i1 P& R7 P" ^! T* t9 k
1 S+ v. k. p2 ^) a---
8 R( U v2 a# U# H. x1 g) d6 I/ v
* H; Y5 U" B) ]$ x! h* F5 Y## 方案二:最安全(高级)- 自定义加密 + 独立密码验证(完全可控)
. T- p" `! w# E8 R9 l如果你想**只有你自己能看**、数据加密存储、密码独立验证,用这个代码方案。
4 ^, ^' ?: U5 }7 {. _7 q" x0 `! k$ Q* E! B
### 功能
7 h7 [* Z% O( F+ K5 I' K$ |4 {- 表单数据**加密保存**到数据库8 d$ n$ s$ _% Z* b% x
- 前台创建密码验证面板$ I8 g. r3 @) t9 _9 [
- 输入正确密码才解密显示数据5 E0 s3 Q! S4 \+ l5 ]
- 无密码完全看不到任何内容
( C" Q/ J( g; D: T1 C
% V4 p# i& p* t9 O% Z### 实现步骤
$ {7 D' s8 p1 Z1. 后台 → 外观 → 主题文件编辑器5 M# v% ~; m# G5 q
2. 打开 **functions.php**(主题函数文件)
1 O9 {0 Y- Y% q4 s) @0 }; U3 D3. 把下面代码**复制粘贴到最底部**:" ^; ]1 i! { U/ j
( l# [# U1 Z8 a' j( Y; I
```php9 m& [$ M$ f P1 x
// ========================
% F( {; T3 l9 R- h9 Q// CF7 表单数据加密存储3 b- h4 M6 V$ U" I
// ========================
3 H: {5 i: s+ {* U- a- Y: Oadd_action('wpcf7_mail_sent', 'cf7_encrypt_save_data');
' K' g. _- B# \! [function cf7_encrypt_save_data($contact_form) {
7 k% y' p& |! R5 ?5 M% ? $submission = WPCF7_Submission::get_instance();9 H2 U5 R) b O1 c
if (!$submission) return;
/ `7 [! P# P& h
/ T6 N1 ~; N2 M $data = $submission->get_posted_data();
/ f7 M0 n0 b$ j8 @/ i; ?7 }$ r $encrypt_key = '你的自定义加密密码'; // 改这里!* p8 x. ]! h$ q+ {: W
$encrypt_data = openssl_encrypt(json_encode($data), 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));
& v" y0 M; B- C3 n: {7 v$ u o 5 \. g% J* c7 Y. |
// 保存到数据库$ f* V6 { p9 q- @4 X
global $wpdb;
# l+ Y0 P" n4 C) v2 u $wpdb->insert(
3 E# N0 }/ Y H- K% C# b( K $wpdb->prefix . 'cf7_encrypted_data',
; n, ]2 ^8 o$ m+ r array(
4 }/ V+ c1 ?" W- J' ^5 { 'form_id' => $contact_form->id(),0 H. B6 ^- X" w$ V$ E' A
'data' => $encrypt_data,
5 d! x: V0 L7 ~1 q 'time' => current_time('mysql')% L& n1 ~' U4 U2 U5 V) W8 \* N
)$ W) t$ a2 U" g" U$ e
); \3 z( T- D, n, p; x% h1 e k
}; j* F, M& B+ i+ L" h$ H! |
9 {. e! Q( I% z- G/ }& n
// 创建加密数据表(激活自动生成); N! p. B' P# w2 F0 r
register_activation_hook(__FILE__, 'cf7_create_encrypt_table');
: ^: \1 g+ \; f/ }. Nfunction cf7_create_encrypt_table() {
& A& t* d y2 q9 T6 _" O global $wpdb;/ U1 j( \, p3 t7 i; c/ b, s: i
$table = $wpdb->prefix . 'cf7_encrypted_data';
1 R$ W, z: R% s4 y* I $charset = $wpdb->get_charset_collate();
% @4 t: C* R3 G" g2 T $sql = "CREATE TABLE $table (% A3 }3 T/ c4 y/ d+ P! \0 c" T8 [
id INT AUTO_INCREMENT PRIMARY KEY,
b. }% @" M7 s( {+ @/ B form_id INT,
2 X9 J0 L5 D8 Q. W7 p data LONGTEXT,+ @; S1 l4 \/ T! e) S4 N$ D+ N6 c0 b
time DATETIME7 L3 }6 E& ^: x2 l# V
) $charset;";
; F5 `5 [% R. M, |2 P- A require_once(ABSPATH . 'wp-admin/includes/upgrade.php');* J! G1 h- H8 d( I# F7 ]% {
dbDelta($sql);; ~* K# P8 A8 `) b
}" u/ j3 }. Q N, v9 y
8 p- A. {+ ^! }, c0 W9 ]
// ========================! Z! d$ g- z0 Q' D/ ~
// 前台密码查看短代码. K% U! j: H2 I# h1 [% x0 V
// ========================
5 z a7 T# p1 G# @' Vadd_shortcode('cf7_secure_view', 'cf7_password_protect_view');
" T) I* X- p7 Y; E! a) N) p9 Pfunction cf7_password_protect_view() {, r1 Q7 {9 v7 ~/ P6 W/ A
$view_password = '你的查看密码'; // 改这里!
' i, `* x6 i" |: a6 P7 l/ k $encrypt_key = '你的自定义加密密码'; // 和上面保持一致
5 B3 \' S7 I4 L0 f3 U. g , ]3 o9 V2 T: Y. e
ob_start();
- J$ V' p0 i4 h+ ]
: D9 W3 m& t; t% L- \ ?0 t3 s // 验证密码
+ z5 C$ U# M5 [* A; @$ B, F' m $pass = $_POST['cf7_pass'] ?? '';
/ g1 M- F- n0 I K! e+ E if ($pass !== $view_password) {& t& y# O5 e! V! O" r O# j( a }0 I
echo '<h3>请输入查看密码</h3>';
1 Q3 i9 R8 v: }' {0 E: P echo '<form method="post"><input type="password" name="cf7_pass" required><button type="submit">查看</button></form>';
/ M4 b: I4 n& x3 L) U$ Y return ob_get_clean();
0 D; u/ L( |5 c0 `! Y6 _, D }9 C X( N ]5 Z
5 m+ n# J& C/ i* r9 T // 密码正确 → 读取并解密数据- ^( G' [- |. ~7 j% [( `
global $wpdb; j. r' v ~+ @4 o5 E
$table = $wpdb->prefix . 'cf7_encrypted_data';
6 A& t7 \ @4 Z6 E; q, q, P/ O h $datas = $wpdb->get_results("SELECT * FROM $table ORDER BY id DESC");3 s9 Y; m( z: U
2 N+ H2 e; ]/ ~5 C4 W
echo '<h3>✅ 密码正确,表单数据如下:</h3><div style="padding:15px; background:#f5f5f5;">';0 t/ K) w6 S2 j$ Q5 x
foreach ($datas as $item) {
2 u3 \. O$ m) c, {# w $decrypt = openssl_decrypt($item->data, 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));! v0 a8 Q+ H3 Y$ g
$form_data = json_decode($decrypt, true);" z# C! T9 y4 T/ n/ X; ]
echo '<p><strong>时间:' . $item->time . '</strong></p>';
, h1 H8 F& x6 i7 f: C3 O b/ w foreach ($form_data as $k => $v) {
" [0 }! d$ T# Y4 m: D* ~1 E8 {; D echo $k . ':' . $v . '<br>';5 J$ h& ?) F: {/ h6 g! H
}
4 u. B! O0 y, h echo '<hr>';' y2 n- _ [0 D; H7 s0 Y
}
9 W0 Z; J1 L/ \: _ E echo '</div>';
8 S) s* O; E* d" [8 `# s7 }+ u
. d' ~5 c0 {% p- x return ob_get_clean();* o6 u/ r+ ^. u+ A$ i/ D% G
}
. U' J* l! D6 z```
}$ V7 Y0 q5 J: Q( z6 N7 I
& L- P( N% B/ p% i- W( f### 4. 使用方法! O$ g+ R5 Y) q* l
1. 修改代码里的两个密码:
/ _2 V; B; J7 Q# ~- O- p2 N - `你的查看密码`:前台输入的密码0 Q5 t; E4 p+ W/ L
- `你的自定义加密密码`:后台加密密钥(自己记住)4 J4 b* N. m+ K6 a( e0 d: G: ^* l+ \
2. 新建页面 → 插入短代码:
6 N4 t2 y* U. A/ E" ~* |7 l ```. Q5 S) C1 @. z l
[cf7_secure_view]
2 O& {3 _8 q) c8 v; T4 s ```9 V5 R' C1 N5 l5 \" m
3. 发布页面 → **必须输入密码才能查看加密的表单数据**4 [" J, |: {+ M& `" l& d$ i
+ M" T! C' E* Q% l9 a✅ 优点:$ J2 d, P4 S1 o8 r! I- v# b7 u8 {
- 数据**加密存储**,无法直接从数据库读取! T3 v/ v+ m* x! W
- 独立密码,和 WordPress 账号无关8 h/ u( ]2 n2 M. ~9 c- Q% D9 k0 n
- 可查看所有表单提交记录
9 V; @* Y/ x+ ?2 o# t- 安全级别高
0 e3 k F5 Z# f' @( z; T2 N$ y- r( {
---
1 b5 w- Q" j5 W t6 {5 D2 t7 r) E( o, q
## 方案三:极简版 - 仅管理员+密码查看(无加密)+ n7 K+ W5 Q, X
如果你只需要**简单密码验证**,不需要加密,用这个超短代码:
* F; ^6 c. t* t! z- U' c3 k
; R* G7 @1 [) C; \```php& b' G+ \# \) w, c
add_shortcode('cf7_protected_data', 'cf7_protected_data_func');; ~6 `7 S) m! @5 Y9 {
function cf7_protected_data_func() {
0 V& \; E! w) k2 N/ _, R $password = '123456'; // 查看密码! `8 J2 ?3 P- T! W% t/ s
if (!isset($_POST['cf7_check_pass']) || $_POST['cf7_check_pass'] !== $password) {
% h9 ~& j! Z% L+ `1 q t' A return '<form method="post"><input name="cf7_check_pass" type="password" placeholder="输入密码查看"><button>提交</button></form>';
1 I7 L' a7 `# g, Y' d4 C }
* j/ G' A% t2 o' Q$ ~; H _ ob_start();) g& g; b! c7 C0 b, |! P. L
echo '<h3>表单提交记录</h3>';
! c" ]; s( P% O6 }' z! t& N global $wpdb;
, \8 o: d/ x$ T) Q! [' Y! { C $posts = get_posts(array('post_type' => 'flamingo_inbound', 'posts_per_page' => -1));# l: e- _! @, D6 p: {: @# m: R* Y
foreach ($posts as $p) {" n+ U4 k1 k, A/ c; A
echo '<p>' . $p->post_date . ':' . wp_strip_all_tags($p->post_content) . '</p><hr>';
* ~8 y' N$ v% _0 ^8 u0 h6 ~ }
: O3 @1 A* ^ N2 S( `7 ^" b0 a return ob_get_clean();7 U0 |2 u' s- c. @
}" i) Y, Q) o+ C: U# T8 t# Y
```+ r" U2 z4 y1 {; }& E1 n: N
使用:`[cf7_protected_data]`
I, I/ G1 h- J# _1 n0 C6 m. Y
, ~' h- f' o+ H---
7 s* [ I4 ?2 G- g! q
7 r. t+ t ^3 O% s7 _! D* G# 最终推荐选择
* T4 x) v. g3 h. ?8 Z' g8 R6 a1. **新手/简单需求** → 方案一(Flamingo + 密码页面)
; z4 X: f1 O/ M5 ^ s" H2. **安全/保密数据** → 方案二(加密存储 + 独立密码验证)
0 C6 b1 y8 ?. T7 @) H4 R3. **快速临时使用** → 方案三(极简密码验证)
; Z" c0 m& U7 N
/ V6 i8 m4 }6 o7 z L( o( h Y8 g---
$ m* U8 p0 E( |2 p/ r0 j
/ i) Z; g; D$ W* ^9 h/ _8 _! m0 l### 总结; L8 P# b" l" c) u3 v/ c
1. Contact Form 7 **本身不存数据**,必须用 Flamingo 或自定义存储
" z6 g. L ]- U, N1 q9 [ i2. 三种方案都能实现:**输入正确密码才能查看表单信息**
9 r; G3 Z+ j I' M& l. E3. 方案二安全性最高,数据加密存储,无密码无法查看
1 _& r* C7 {; h1 U M8 `4. 全部可直接复制使用,无需懂代码
/ b+ k2 G& Q) O" @) L5 V2 A: R' `; X" ~1 L. j' Q6 I
需要我帮你**定制样式**、**限制只能管理员查看**、或**支持多表单分开查看**吗? |
|