|
|
# WordPress Contact Form 7 表单数据加密查看(密码验证)完整方案
8 h9 L$ s+ n% n4 }你想实现的核心需求:**Contact Form 7 提交的表单数据,必须输入正确密码才能查看,未授权用户无法直接看到**。0 S* i% |- O' O) B/ G/ m
# d+ |4 h8 p& x2 h$ L8 A7 S
我给你提供**两种最实用、零门槛**的方案,从简单到进阶,你可以直接选用: ?- i7 k( u8 q8 j, g9 o. I. N. b
! d. K5 N2 _) A4 }3 D/ w5 H
---% e1 n3 W- [# k& ^! g6 O5 t+ u
' u. U6 u" G/ u0 `## 方案一:最简单(推荐新手)- 配合 Flamingo + 密码保护页面' i6 c3 Q1 f6 z/ Q# b8 T4 G7 q$ R( [
Contact Form 7 本身**不存储表单数据**,需要搭配官方插件 **Flamingo** 存储提交记录,然后用 WordPress 原生功能实现密码查看。
1 q. _' M/ W& v, L& _2 s! a4 n1 e3 q
### 步骤 1:安装必备插件
; p5 ^1 R* b$ G/ C1. 后台 → 插件 → 安装插件
; E! v' L6 \# P/ C5 E; ?' i2. 搜索安装并启用:+ A4 M/ l$ b1 j8 t) ^5 S5 W8 J
- **Contact Form 7**(你的表单插件)
4 U. r7 H- y- _' Z - **Flamingo**(CF7 官方数据存储插件): ]& t7 Q/ D* }4 Z, P, V ~
4 @4 h) _3 T0 U! l# e4 N### 步骤 2:创建【密码保护的查看页面】
0 q; A+ z2 T, \0 D$ j& q1. 新建页面 → 标题写「表单数据查看」
6 [7 \9 x+ a0 g1 b2. 右侧 **发布** 模块 → 点击 **公开** → 选择 **密码保护**
: [/ v) m+ v& V2 \3. 设置你的查看密码 → 发布页面
" S; a, U% Y; A% q! T) e
. z) R1 o) e9 K7 V! ]; B' B### 步骤 3:页面中插入表单数据短代码
; K" Z* Z7 Y1 f在页面里粘贴这段代码(显示所有提交记录):: m! o2 z+ S1 s9 f: e0 s' \3 A9 ^
```html( q0 W1 J- o U4 B4 ~7 R
[flamingo-messages]
5 m. ^0 a. ~, S4 P' C3 i* |```4 j; a/ N% @5 |" @9 E
发布后,**任何人访问这个页面,必须输入密码才能看到表单数据**。+ m2 q! m `+ B( ]
6 T, \/ e4 J" I* a U
✅ 优点:4 K& [+ ~8 `$ v1 F
- 纯官方插件,安全稳定
$ p) m) S0 } F% r( |4 i- 5 分钟搞定,无需代码& _; {+ X, J+ m5 u0 {
- 密码独立,后台管理员也必须输密码才能看5 i2 i8 s& B# ^; ?$ G
; Q/ k3 C5 M. p% w% N. n" Q
❌ 局限:只能查看,不能复杂筛选1 a: v& u" b: @; c) E
) w* z; I$ P. D7 j) o+ @
---
$ Z( ~# f9 V8 B( B
3 P; q9 B" D) \. z, p5 c7 e## 方案二:最安全(高级)- 自定义加密 + 独立密码验证(完全可控)
$ S: `$ ^. O; E5 G. u. t7 X如果你想**只有你自己能看**、数据加密存储、密码独立验证,用这个代码方案。
! M0 {+ [ y5 ?: s' P. Q2 @% V) S- `( }. X1 l" A+ |- u: N! d
### 功能
" G% D, W/ r2 _- 表单数据**加密保存**到数据库
5 C8 y! w! i3 G3 K, W- 前台创建密码验证面板
8 G; i2 g! B0 }" v4 P' Y- 输入正确密码才解密显示数据4 `0 w: q# a/ b. {; _
- 无密码完全看不到任何内容
3 T$ t2 z2 O4 {; K+ S' R. W- e
' \; U0 G% Y' h$ O" B* t### 实现步骤
- o; r( ]( [ T" ?7 t: s1. 后台 → 外观 → 主题文件编辑器
$ J. Z0 @% B# r% N6 F9 g% H$ [2. 打开 **functions.php**(主题函数文件)
4 K* ~# o9 a* T0 J7 S2 z( \4 S3. 把下面代码**复制粘贴到最底部**:. O; T" a0 G: U2 `# g5 b
' V; x7 D! L7 m- v```php
) Z9 J9 }: c4 v& y& i) m+ k// ========================; |9 v7 W4 y9 g, a3 B+ |
// CF7 表单数据加密存储
8 `- g; [# V) G% p6 Z// ========================
; q) T- J9 A. G' U% H6 z3 Y, w; Gadd_action('wpcf7_mail_sent', 'cf7_encrypt_save_data');/ W c* T0 T* |9 ]; V1 W0 A3 X
function cf7_encrypt_save_data($contact_form) {3 ?0 W4 ]7 u1 y" I3 O# M
$submission = WPCF7_Submission::get_instance();
D; Q9 \) l. ?. L8 [7 _1 Y; P$ ? if (!$submission) return; H! C, H: G0 Q4 \) @5 C
# R! i \/ q1 [9 S $data = $submission->get_posted_data();8 p: ^, h$ Q$ f; i7 ~7 ~
$encrypt_key = '你的自定义加密密码'; // 改这里!
# |5 ^. A8 O2 F" F" |9 P6 [- M $encrypt_data = openssl_encrypt(json_encode($data), 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));
9 c2 O" R# c9 |* P 0 {$ A: V4 S+ R
// 保存到数据库# G1 Y* ]* r, T9 a
global $wpdb;( m' {9 i2 q1 t! J L4 C7 j3 g
$wpdb->insert(
8 g: w) `$ ^# N- K $wpdb->prefix . 'cf7_encrypted_data',/ b0 G: l$ @$ F2 \, [. l; ]
array(
8 _$ d# N: w$ q$ t ~ 'form_id' => $contact_form->id(),
; S( Y- m3 s/ Q. G. W' S4 e 'data' => $encrypt_data,
$ z/ R6 c( b7 h- B5 R( G5 M 'time' => current_time('mysql')% P6 g- y! O+ G% o# B9 O% U/ a
)
( J3 x, S3 p$ E: b; D( i );
3 v" j* y7 d3 b6 `}
3 F. O, D# R. Z: c
, C2 M6 \) V# P3 a3 \# f// 创建加密数据表(激活自动生成)2 F7 s8 e/ B! f5 \1 L! y7 B
register_activation_hook(__FILE__, 'cf7_create_encrypt_table');5 z+ T7 G- c4 p$ \: A
function cf7_create_encrypt_table() {. q Q% a3 u7 Z% }
global $wpdb;9 H+ ~* o9 w1 ^3 _7 N- ]% W8 V
$table = $wpdb->prefix . 'cf7_encrypted_data';( n, [( E. @6 B
$charset = $wpdb->get_charset_collate();
# i$ i* ]: X1 V! l $sql = "CREATE TABLE $table (7 b: |. q0 k% f P& y# J5 [4 d: @
id INT AUTO_INCREMENT PRIMARY KEY,% t y8 S$ c' O' e1 e
form_id INT,
+ K5 E3 n3 b2 `+ @% |" b data LONGTEXT,
5 C _: _% L+ p4 }% ] time DATETIME% F' K; _; m2 [. s' b6 P
) $charset;";
- Z% a) K0 m/ a/ h* O1 L require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
1 ]0 ]" Z9 q) m- E: _" [ dbDelta($sql);
9 Q, t# }' ^4 n+ r" W, v. B) _$ g}$ Z* ~8 ?1 n7 [+ `& t9 D n# a
. W3 O* m' v% J// ========================/ ]: W" H! J5 W% f5 Z, e5 s- y
// 前台密码查看短代码- q, Y; ]# |* g; [6 Y- Y; U
// ========================
+ J/ {3 D) l% Q& Ladd_shortcode('cf7_secure_view', 'cf7_password_protect_view');
( C- _/ t g. ~$ P" }function cf7_password_protect_view() {8 O$ [, R4 N1 B" U5 g+ X; U
$view_password = '你的查看密码'; // 改这里!7 T6 a3 b& y, ~' ^, {
$encrypt_key = '你的自定义加密密码'; // 和上面保持一致
' P; t4 ]8 i8 K7 p& h$ h
& Y+ j/ z4 y" U( |" D ob_start();
; Z! _2 n6 j$ f( `0 N6 G: W7 R
, j, q1 A, p* i) p' c/ s& Q // 验证密码
/ F( k: e! p! B# ~9 }4 J4 l. e( K: @ $pass = $_POST['cf7_pass'] ?? '';% o8 A1 N1 E( p3 L! u. N
if ($pass !== $view_password) {
8 Z8 S! }$ L* O echo '<h3>请输入查看密码</h3>';
! y+ g4 v* u- r: Z8 W echo '<form method="post"><input type="password" name="cf7_pass" required><button type="submit">查看</button></form>';
' i3 H( S" [) x% I0 F$ z9 t1 E return ob_get_clean();1 a' |! M6 E2 O
}7 K9 E( K5 t2 S' p
- K4 f& J* s! g: V
// 密码正确 → 读取并解密数据7 v" ?2 x. K, l
global $wpdb;4 a: g8 v7 P3 [4 u
$table = $wpdb->prefix . 'cf7_encrypted_data';
$ p+ U) U9 u( j |: i, \- J3 w $datas = $wpdb->get_results("SELECT * FROM $table ORDER BY id DESC");1 T- s# V7 D0 Z, a d$ t
5 L1 S0 j- c) c4 u
echo '<h3>✅ 密码正确,表单数据如下:</h3><div style="padding:15px; background:#f5f5f5;">';
; T* \5 X# W0 B! h foreach ($datas as $item) {2 o5 \" O. Y, U2 i5 {9 h' D: V( |) z
$decrypt = openssl_decrypt($item->data, 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));1 D' m$ Y5 \# s
$form_data = json_decode($decrypt, true);( `; k; l( E1 _6 Q% X
echo '<p><strong>时间:' . $item->time . '</strong></p>';
9 l& x$ ?; y( K3 m7 g: x. w6 H foreach ($form_data as $k => $v) {
3 v: U: D& d8 m; q5 H0 b2 M/ f echo $k . ':' . $v . '<br>';
5 u; f- v7 k( @" ~+ a }
/ C) i3 ]2 J" ]6 _5 O echo '<hr>';/ a4 S. g8 j) F$ P! @& `$ x9 D
}
) U( |" c- K- r+ W0 F0 l& o echo '</div>';
$ ~' i6 v. z/ H3 K( |
& \9 \ P4 `$ [) m5 z; `* |5 m return ob_get_clean();, X) U7 D+ q, e. P6 E
}
% ~. T. H! g i% g8 v```
" m7 i( G% m6 o/ Z. d8 Y% q. m# e* m2 q t, Z4 Z
### 4. 使用方法
) }1 r8 H2 n' i3 n1. 修改代码里的两个密码:
, B) G% k* a+ g) I n - `你的查看密码`:前台输入的密码+ r- ^+ {6 Z$ B* W; s
- `你的自定义加密密码`:后台加密密钥(自己记住)
7 `, P8 Y) y6 ^8 e2. 新建页面 → 插入短代码:+ H+ l3 E; ^6 k1 ~8 v$ i! a6 ?# v/ m, O
```6 V! X. e' n! D" V' Q( x
[cf7_secure_view]
( U! |# B! n4 ?9 j) I ```/ l& H( d' X$ y6 t+ Q( u0 Y1 s
3. 发布页面 → **必须输入密码才能查看加密的表单数据**4 O( ?! w6 l- {) U
: `6 x$ _! m/ k4 {
✅ 优点:/ f1 o- Y7 n8 D
- 数据**加密存储**,无法直接从数据库读取
0 A& Z% o i i% m- 独立密码,和 WordPress 账号无关
{$ A+ K7 s3 t; w! d7 E5 P7 F4 g, ^- N( y- 可查看所有表单提交记录" ~( ^6 K. u6 Z
- 安全级别高: n/ d6 ]! b. ~3 U1 h$ D) l( M% w
0 V, r. [! Y0 u7 d5 U/ D---
; Y$ _! S& r! s1 A8 n4 ]6 x" C/ X! Z% u9 n/ Q3 q$ e
## 方案三:极简版 - 仅管理员+密码查看(无加密)8 F) ~) R1 u8 ?
如果你只需要**简单密码验证**,不需要加密,用这个超短代码:/ d" j: V5 m! p2 o- g L1 R
& ]: Y/ i) Q! b. ~```php
9 _7 C+ P, ^9 _' H3 c. A# O# G c6 ladd_shortcode('cf7_protected_data', 'cf7_protected_data_func'); V) Z% A; U) Y. W
function cf7_protected_data_func() {
9 H8 T" s" Q' a4 Y ], y $password = '123456'; // 查看密码7 X+ V3 s$ v& a7 \# |5 O
if (!isset($_POST['cf7_check_pass']) || $_POST['cf7_check_pass'] !== $password) {( i6 c& c& s) p( |7 P
return '<form method="post"><input name="cf7_check_pass" type="password" placeholder="输入密码查看"><button>提交</button></form>';, ^; f% P$ D4 M) X2 `
}, e3 C9 n$ |6 v, a d/ k% e
ob_start();
2 t% D8 \7 U# D7 A7 W9 H; B1 r6 A6 G echo '<h3>表单提交记录</h3>';7 |- V* {' Q) f' J) g
global $wpdb;
! @1 }( D* W/ o' g0 { $posts = get_posts(array('post_type' => 'flamingo_inbound', 'posts_per_page' => -1));7 i4 W) `; s9 `: e
foreach ($posts as $p) {# y! j. {$ f+ f7 t* D: [
echo '<p>' . $p->post_date . ':' . wp_strip_all_tags($p->post_content) . '</p><hr>';+ F. K) k8 Y Z
}% r$ Z2 G) H0 w4 `( |7 `8 y* o
return ob_get_clean();7 |- V o8 P8 Y, G; {% |8 _
}
/ z. j2 Q, o1 n+ U. W```. c8 m2 d0 C+ @% g( x6 m
使用:`[cf7_protected_data]`
/ e& ]& g0 Y* i5 Q3 l4 w E1 b7 k2 V$ S- p5 ~7 X8 ?/ K+ Y
---
& K) _+ p4 A7 [& I
+ T0 W0 ^( f" @" Z/ x. u' q# 最终推荐选择
) e9 j5 e2 n" a ^; i: e1. **新手/简单需求** → 方案一(Flamingo + 密码页面)) V; ~% q2 |' m
2. **安全/保密数据** → 方案二(加密存储 + 独立密码验证)
8 s$ A4 M- z( ]' Y. v3. **快速临时使用** → 方案三(极简密码验证)
3 h. N2 L$ e4 @5 D2 I* ~" c; i% s
1 v% a7 n: Z3 {, Q0 V) |% ^+ ?---
5 u: v" Z$ R9 k$ Y6 u
# y: Q# e+ @ _2 U: K0 I( ?, W! b### 总结
5 c$ u8 e3 ]: c8 d" H1. Contact Form 7 **本身不存数据**,必须用 Flamingo 或自定义存储" g1 w+ Y( l7 P& s- K3 Z
2. 三种方案都能实现:**输入正确密码才能查看表单信息**
3 f" i) @3 E& q8 V1 X O2 F: m3. 方案二安全性最高,数据加密存储,无密码无法查看
" E+ K' a, |! S$ o3 a4. 全部可直接复制使用,无需懂代码
1 U I0 t8 ?: ~, H& a2 h# W R, r9 O0 _" X l* Q, r/ E
需要我帮你**定制样式**、**限制只能管理员查看**、或**支持多表单分开查看**吗? |
|