|
|
# WordPress Contact Form 7 表单数据加密查看(密码验证)完整方案- B& o* R/ }4 Z' R4 q/ f# |8 q
你想实现的核心需求:**Contact Form 7 提交的表单数据,必须输入正确密码才能查看,未授权用户无法直接看到**。
, X2 Q: h, F0 R9 W$ y
. P; ]7 L9 C9 ?: H k( ^" T9 J我给你提供**两种最实用、零门槛**的方案,从简单到进阶,你可以直接选用:
2 F0 Q7 u. D; T2 C5 a6 g) H) k( K' C. D- r% P" @
---" b6 k, L* {% f1 p0 N
0 N: j; [' C0 h9 X3 h: t+ I## 方案一:最简单(推荐新手)- 配合 Flamingo + 密码保护页面
0 R f% ^, c/ L$ k9 YContact Form 7 本身**不存储表单数据**,需要搭配官方插件 **Flamingo** 存储提交记录,然后用 WordPress 原生功能实现密码查看。+ U) H! D N# j o4 X7 }, S
% q6 n" z3 X) I5 L; J### 步骤 1:安装必备插件
6 ?( G9 l+ z. A1. 后台 → 插件 → 安装插件' k4 x* D& Y; ?" w+ @
2. 搜索安装并启用:4 q$ s. G4 @! p3 P0 J
- **Contact Form 7**(你的表单插件)
+ z+ s. C6 T8 x/ b- o1 S0 S - **Flamingo**(CF7 官方数据存储插件)# \; W- Y7 g( a
. M* r2 Y/ K0 Z4 Q! I6 [### 步骤 2:创建【密码保护的查看页面】- t. F. e7 P! w$ y' m: m7 i
1. 新建页面 → 标题写「表单数据查看」% m4 @" f- H [9 d0 ^- Z
2. 右侧 **发布** 模块 → 点击 **公开** → 选择 **密码保护**
! W1 d) ~, e. u+ s3. 设置你的查看密码 → 发布页面9 |# u2 r( [, U0 }7 W3 w
6 Y4 A% o- n9 \7 W2 a" w
### 步骤 3:页面中插入表单数据短代码
$ O; D& h7 J! W! s( ^/ o在页面里粘贴这段代码(显示所有提交记录):
! M! o3 j8 m/ F```html" W* Z( `3 m3 ~9 A* Q2 [
[flamingo-messages]8 c. Z4 G% _7 t9 y1 Y
```
+ A1 K! I l2 `/ G( i. X% I发布后,**任何人访问这个页面,必须输入密码才能看到表单数据**。9 ?* T6 {: \ N; g; I
! q# ~6 V5 S* g% o✅ 优点:5 s3 _( } e& W( a. T( v
- 纯官方插件,安全稳定
8 s7 g2 d: @/ b8 a7 W- 5 分钟搞定,无需代码
' W+ [6 f1 a, K( o( Q- 密码独立,后台管理员也必须输密码才能看) m d" n! o7 n9 q# w, p
7 n: f( x M& L9 U) M
❌ 局限:只能查看,不能复杂筛选9 ]. {0 Q5 Y1 P1 k8 V3 i- j
( ]. p/ q2 Q" m+ X& t
---
; o7 ~7 x2 ~0 D' Q# l0 T3 H: F U t8 y8 R5 i
## 方案二:最安全(高级)- 自定义加密 + 独立密码验证(完全可控)$ x" x( C( T. K! m' A: q! G: R. A
如果你想**只有你自己能看**、数据加密存储、密码独立验证,用这个代码方案。
' m$ h, U) s3 f6 j6 b7 C+ x) y. O& g) g; ]% B) I/ J/ O4 B
### 功能% w1 s5 j: S* A6 H T
- 表单数据**加密保存**到数据库 w+ B6 m/ Z, y( j2 B+ E, }
- 前台创建密码验证面板
7 s2 d) ~! _0 _+ A- 输入正确密码才解密显示数据/ }7 T u0 S7 D7 Q) f3 g
- 无密码完全看不到任何内容
`7 S8 n7 E( K9 W8 U
- J4 D! D, o* H; u1 t### 实现步骤0 _6 ?/ s8 @. Y! [
1. 后台 → 外观 → 主题文件编辑器' C( Y: {" ^* T! B; P
2. 打开 **functions.php**(主题函数文件)
6 K" b k8 R/ A' _4 k3. 把下面代码**复制粘贴到最底部**:( Z% ?$ Z. _- k% f* T
, \$ \! k7 Y/ X o' q
```php% V# _# g. P. S* X
// ========================
7 M- b3 l. g4 ~1 W5 x' J// CF7 表单数据加密存储
- y/ P& K+ v0 p: A: T( A5 S// ========================
& g' v/ X0 J! \/ `$ y+ Zadd_action('wpcf7_mail_sent', 'cf7_encrypt_save_data');
' A9 J$ m: p) Q. U/ c8 x6 l; Mfunction cf7_encrypt_save_data($contact_form) {
" g% E1 F$ \6 h1 S& _# K) m $submission = WPCF7_Submission::get_instance();
& d) x4 k8 S# l6 V if (!$submission) return;
) Z( E3 ~; D2 N! |3 R2 g& G $ @/ e/ Z& p) e, J1 g! u
$data = $submission->get_posted_data();
( I. n$ U# l/ } h6 y( M" F $encrypt_key = '你的自定义加密密码'; // 改这里!
0 r8 e1 X( c- z1 X7 _6 c) Y* I# t $encrypt_data = openssl_encrypt(json_encode($data), 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));
- u( H3 T( b0 S. i$ L/ b' t
O5 }6 U( a/ s+ I+ r8 @# B( h // 保存到数据库( f! R/ p8 B' i" a6 ~9 L& ^! P& b d
global $wpdb;* h8 b: p' Q' C Q' G' l
$wpdb->insert(' p0 b* y8 A/ _9 T& M' H
$wpdb->prefix . 'cf7_encrypted_data',7 _7 D! _1 u( g; @" t
array(
- R- M8 v6 [+ P7 y0 T* | 'form_id' => $contact_form->id(),
- I4 c( S* V6 A4 s; C, g8 x5 q0 v. U" A 'data' => $encrypt_data,6 P( \4 e+ ~- O Q; b# u) v
'time' => current_time('mysql')! x* P r7 q0 R" {
)
+ {1 g1 y0 ^- P% H* @3 P );
9 h: X) s# K! F7 M' y}
# N% \" N4 A7 K/ p& Q6 a; M$ J+ }! z" r; u% G0 U7 B, u
// 创建加密数据表(激活自动生成)
7 M) {/ @. }- j/ Rregister_activation_hook(__FILE__, 'cf7_create_encrypt_table');# k+ h L& R0 d& R+ V% B+ ]# P! E
function cf7_create_encrypt_table() {
( i: y6 Q1 r1 B! z9 f global $wpdb;
6 j( q! g% `6 |8 D \. ^; ]- I $table = $wpdb->prefix . 'cf7_encrypted_data';
6 u+ k2 r0 A/ G$ Y $charset = $wpdb->get_charset_collate();
, q$ G& n" ~/ [0 d5 j$ F r $sql = "CREATE TABLE $table (% O- B7 A X- H9 f" U7 P! J" r
id INT AUTO_INCREMENT PRIMARY KEY,5 |( g, v& f; n. z! a* e+ b6 H2 X
form_id INT,9 C- a1 ~, D8 R' ^7 v% R6 n
data LONGTEXT,
6 u# c5 L. a* q' V9 u- [8 y time DATETIME
- j" g$ G t ?' J* s; x ) $charset;";
+ u/ ~$ ]6 M0 K# Y2 U, B k5 f require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); ?' n( l8 g& [- _
dbDelta($sql);. E& D( {# @5 Y2 u: U- R
}. A- b2 l, x9 A o
" C$ j- t( T5 l' Q// ========================- h3 K/ A9 u* F/ K! R$ b
// 前台密码查看短代码
2 z# V2 @ {8 A6 i; J: }// ========================
4 \" K/ f9 \& t1 g* _( Vadd_shortcode('cf7_secure_view', 'cf7_password_protect_view');9 Z( h( f i$ P; Z! b
function cf7_password_protect_view() {
+ i0 M( K) O/ f& @( U' [ $view_password = '你的查看密码'; // 改这里!# s5 K/ N3 S& s" D
$encrypt_key = '你的自定义加密密码'; // 和上面保持一致% P2 A* H( g. [6 E
; f9 ?/ \* L3 Z; V
ob_start();1 ~7 U* @: |5 E1 L4 {! B7 q/ {8 O- V
t( A) C) C; |. z // 验证密码
, t8 f. r- J' V8 h1 m: Q $pass = $_POST['cf7_pass'] ?? '';
6 R% n, F) f# ?: H7 B" z5 w) T if ($pass !== $view_password) {% t5 }/ K% l* [( g6 N6 Q& [
echo '<h3>请输入查看密码</h3>';% C. ?0 U4 p! I+ B* D
echo '<form method="post"><input type="password" name="cf7_pass" required><button type="submit">查看</button></form>';
0 Y% [# H1 X! E) [3 b- M T return ob_get_clean();
7 z4 X& M0 ~9 G/ e3 d) H }* G6 N3 _' E# C' e9 C" D2 Q+ S L
& s, @" j# k+ R$ o // 密码正确 → 读取并解密数据
6 ]& B+ V3 J! \/ e3 n global $wpdb;
: v- _& F! T' s0 c' o* b- D $table = $wpdb->prefix . 'cf7_encrypted_data';/ j7 H6 {' ]# X" N+ m! q2 ~8 w: ^
$datas = $wpdb->get_results("SELECT * FROM $table ORDER BY id DESC");8 ]5 j7 I9 l. T2 g9 S$ v, i
1 b) H" l4 m. L0 v( v1 j2 d7 J
echo '<h3>✅ 密码正确,表单数据如下:</h3><div style="padding:15px; background:#f5f5f5;">';
8 j1 r/ f7 ?# R, |, ]$ `+ O foreach ($datas as $item) {
& k" J% Z9 M c* B! g $decrypt = openssl_decrypt($item->data, 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));
/ [/ ^* r# ?* ]' v $form_data = json_decode($decrypt, true);
- t2 O; _. X" h& k echo '<p><strong>时间:' . $item->time . '</strong></p>';/ Q9 Y: H4 E7 X5 t" \1 |
foreach ($form_data as $k => $v) {
% t/ ~, _- u6 ^: p; E3 P echo $k . ':' . $v . '<br>';
, {+ I _7 Z P5 y& S& I3 w" S6 H }
9 v1 C3 ~# y5 ^: z echo '<hr>';
. e0 P0 g2 x0 V. W }
9 P3 F# R8 o: I echo '</div>';
0 c! u) S' ]4 p5 Q
: R' Y& I& L+ d return ob_get_clean();
! z. O& L! k4 f; K2 V w}
: V; u' q' s/ j5 O```
5 t& S9 V2 V0 b* z! W: r6 W/ K, k1 w+ ~
### 4. 使用方法
& |4 L' M, I4 [" m7 ?$ ?% q, b( a+ w- O1. 修改代码里的两个密码:! S9 Q& s# G7 Z6 a. `! r
- `你的查看密码`:前台输入的密码- N8 G, @! n4 b. A: w0 k% V! A
- `你的自定义加密密码`:后台加密密钥(自己记住)8 }' [9 ~- C3 L6 o x
2. 新建页面 → 插入短代码:: H8 p8 u* j# w$ }. H+ F: v
```
& U: L7 t; l' ~; u) T [cf7_secure_view]5 {5 n( y1 I* U/ @5 f- v" D
```" H8 N; u/ P5 c5 Y2 K
3. 发布页面 → **必须输入密码才能查看加密的表单数据**+ ]. `; C9 W! b& U' E/ U7 B5 `9 e# d
7 S) M: j9 ?: C! s3 Q% p, `- S$ T✅ 优点:2 X. ]+ \! `. F( {- n7 O7 {
- 数据**加密存储**,无法直接从数据库读取
; ?' \! l' D0 z p# N: E( v& c% f- 独立密码,和 WordPress 账号无关
/ F4 O" e0 b$ Q* M6 Y( z- 可查看所有表单提交记录# l/ F3 } E d: u$ u3 g# v
- 安全级别高% w. _3 `6 x0 W" d0 A8 L% p) ?
( `! D# p" e+ h) u) u---
3 O. U9 _( G# i$ f
9 R* T+ b0 C" I6 Y r% \## 方案三:极简版 - 仅管理员+密码查看(无加密)( o/ }, J s' _
如果你只需要**简单密码验证**,不需要加密,用这个超短代码:
0 v" R: G# o1 p; E
' U" a. Y; Y7 O' r |```php
7 N; ?% ^9 }0 h3 j( T# b5 y; Xadd_shortcode('cf7_protected_data', 'cf7_protected_data_func');
! k* q% P ~$ @" @1 H$ f4 qfunction cf7_protected_data_func() {; t; M6 o+ Q% z; _) U" R
$password = '123456'; // 查看密码' U8 m/ D# X/ g! x; M
if (!isset($_POST['cf7_check_pass']) || $_POST['cf7_check_pass'] !== $password) {6 Q( a4 b' }# R! X; ?
return '<form method="post"><input name="cf7_check_pass" type="password" placeholder="输入密码查看"><button>提交</button></form>';
7 ]- y4 G. j) g+ d6 Z }
6 W/ h$ \6 d, _. o3 D; D M9 U1 ~ ob_start();3 L, ?5 \& s0 j
echo '<h3>表单提交记录</h3>';5 |( w* [" i0 _. I2 f
global $wpdb;6 O/ y( _( e! G% D3 G- w
$posts = get_posts(array('post_type' => 'flamingo_inbound', 'posts_per_page' => -1));* J+ Z6 O8 u; u- u4 U! u! ]' D
foreach ($posts as $p) {
- n6 n1 d0 w: }/ ]9 L+ N& ^/ v: g. ?8 V echo '<p>' . $p->post_date . ':' . wp_strip_all_tags($p->post_content) . '</p><hr>';: ?( V# |5 S v) R0 I
}7 j z' K( \: u
return ob_get_clean();& B3 V# y/ c! o
}; E+ I3 G: {' Y+ n0 }2 h3 V2 b
```
3 l# Q( f ] W9 p+ B4 C9 {使用:`[cf7_protected_data]`( p4 u. |1 C0 @5 X& {% w
' ]1 T1 J4 G9 ]+ m---
8 w" k1 X" V# h3 y4 l4 z; q4 [; u/ c0 N$ a: v6 A6 e& B3 F' o
# 最终推荐选择
/ [' s B. L2 Z! y! w1. **新手/简单需求** → 方案一(Flamingo + 密码页面)" ?# Q& f) g4 u6 I" {1 O
2. **安全/保密数据** → 方案二(加密存储 + 独立密码验证)3 t8 O, ?0 L# \* S, W
3. **快速临时使用** → 方案三(极简密码验证)6 \8 x! M/ [; o& a% @( g
# `4 B$ `. z0 E! c3 T4 `+ J---3 q8 E- y+ P3 r. `, [
% J0 q' ^' Q% x
### 总结1 \! X2 R" [7 b! M* z5 }' z5 ?& \
1. Contact Form 7 **本身不存数据**,必须用 Flamingo 或自定义存储
0 M4 ^+ g) C8 Q2. 三种方案都能实现:**输入正确密码才能查看表单信息**
! C& V8 F! s B3. 方案二安全性最高,数据加密存储,无密码无法查看! }9 y9 Q: F2 o4 @# s$ H
4. 全部可直接复制使用,无需懂代码
: \! k A1 k, n% i) ]
2 F" b6 G' E1 f5 j% {7 G% X( t需要我帮你**定制样式**、**限制只能管理员查看**、或**支持多表单分开查看**吗? |
|