找回密码
 立即注册
查看: 273|回复: 0

豆包:WordPress Contact Form 7 表单数据加密查看(密码验证)完整方案

[复制链接]

524

主题

676

回帖

4597

积分

管理员

积分
4597
QQ
发表于 2026-5-27 09:35:11 | 显示全部楼层 |阅读模式
# WordPress Contact Form 7 表单数据加密查看(密码验证)完整方案; _1 Y8 k+ f3 F; @; _
你想实现的核心需求:**Contact Form 7 提交的表单数据,必须输入正确密码才能查看,未授权用户无法直接看到**。" y6 V! @% x$ q% ]& c
& O. _  ]0 J  |
我给你提供**两种最实用、零门槛**的方案,从简单到进阶,你可以直接选用:5 K9 W6 ?  K8 R8 H6 M2 E" s
: G( K% ^; D4 t$ |7 G" a  d4 h
---: N: \' c8 ~1 _. R, o7 l
+ }/ \1 W0 ^; z: x: T* }) V4 m1 B+ y- |$ X
## 方案一:最简单(推荐新手)- 配合 Flamingo + 密码保护页面
( f9 y5 A! Y# [Contact Form 7 本身**不存储表单数据**,需要搭配官方插件 **Flamingo** 存储提交记录,然后用 WordPress 原生功能实现密码查看。  }( Y( c0 }. B& |3 b( j/ D

7 ^- W6 x: q4 H: N. Y% U### 步骤 1:安装必备插件3 h4 P0 P0 g) G- D
1. 后台 → 插件 → 安装插件* j! d: s" C/ S0 Q5 `; e( \
2. 搜索安装并启用:
, d7 T3 _# r6 p( Z; m1 A   - **Contact Form 7**(你的表单插件)  g' o( Y$ t, E( Q, v  ]" }
   - **Flamingo**(CF7 官方数据存储插件)
! ]) E7 D1 U  w; d& w3 b1 w& q2 A: \  E
### 步骤 2:创建【密码保护的查看页面】+ q6 \) @& U; m3 D. q% W5 `0 s
1. 新建页面 → 标题写「表单数据查看」
  H! F, y/ r/ Y' H2. 右侧 **发布** 模块 → 点击 **公开** → 选择 **密码保护**
9 G# G* J0 l2 O3 q/ g# a4 o, {3. 设置你的查看密码 → 发布页面
- ~% I7 w& }9 d5 v6 D! X& Y# }" k) d8 o  {5 @% C
### 步骤 3:页面中插入表单数据短代码
2 q, Y" z3 P1 i1 A5 v在页面里粘贴这段代码(显示所有提交记录):( V4 z& R# `( k4 g7 _
```html
: L2 Y; e5 m2 v3 |- f# a$ G[flamingo-messages]7 E% e9 h9 x& x$ P
```
! y# ?, D  Q9 A发布后,**任何人访问这个页面,必须输入密码才能看到表单数据**。
7 V9 @/ [6 a& n' R
/ a! l+ ^+ F5 Q4 U; i, Y✅ 优点:
( N& H( k* z/ G3 t7 h- 纯官方插件,安全稳定
& H/ [! I( j$ Q4 Y" S- 5 分钟搞定,无需代码
/ s; f/ Y- v! [5 @# ]$ W4 r- 密码独立,后台管理员也必须输密码才能看
& |) v$ T2 V( X/ S2 z  ?4 K( J/ E) f! l  j
❌ 局限:只能查看,不能复杂筛选- j' s& O+ [2 _' J+ n6 T
, F: O7 n6 }. u% V3 b
---
9 M3 ]8 R- ^% r+ z8 `" w7 u; M; n- }  t8 a# m# {- `0 x% T, j
## 方案二:最安全(高级)- 自定义加密 + 独立密码验证(完全可控)
' _8 y" A$ `' l8 d5 `$ }如果你想**只有你自己能看**、数据加密存储、密码独立验证,用这个代码方案。; P+ u* r. g$ p# C& S; Y9 H

1 p  j1 o0 h4 D( [+ k1 T$ T) l### 功能% J3 W3 f/ g* |' H1 b4 Q
- 表单数据**加密保存**到数据库& u4 m, G' ?/ ~0 t* v+ L
- 前台创建密码验证面板
4 @# Q6 @  G7 f8 a& x  Y' v/ G6 R- 输入正确密码才解密显示数据
# p- o" g# g+ w" n% r- 无密码完全看不到任何内容& Y8 P& g% A  D
, e) M; w4 S' c2 a2 _# H5 Y9 ^
### 实现步骤
7 E. M6 [" N5 g7 ?6 y  {1 n1. 后台 → 外观 → 主题文件编辑器
$ C& R' o$ E' X, h- ^. R! i. V2. 打开 **functions.php**(主题函数文件)
3 ^% w7 i1 Y/ [3 T3. 把下面代码**复制粘贴到最底部**:
& ^  i! q$ n! [1 U* N7 e3 l
; v" A- R' v6 v0 L```php
6 U) A' r) e: e# \/ o// ========================1 W, c3 ~' f& W7 R) C& m
// CF7 表单数据加密存储( q% ~4 p: i1 V. m; f: P
// ========================
. t- |; _& o- n7 x! j6 J2 g$ Oadd_action('wpcf7_mail_sent', 'cf7_encrypt_save_data');
" G+ i- J  [( O7 _& \- wfunction cf7_encrypt_save_data($contact_form) {
  Z7 ]7 i2 o8 l5 s2 z- N1 z" p    $submission = WPCF7_Submission::get_instance();
# Z  K; O1 h( u. ~$ `    if (!$submission) return;
% }* _( N  ]/ s) `+ w      C4 F+ P; J3 [6 c5 y! h! R* Y
    $data = $submission->get_posted_data();( s+ R2 h; X, ]1 k
    $encrypt_key = '你的自定义加密密码'; // 改这里!; b: K, o3 A& e5 z; ~$ f3 q! U
    $encrypt_data = openssl_encrypt(json_encode($data), 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));
3 J7 P% w% C% b3 l( }, Z    $ E$ v8 `1 i& q3 k) C+ i$ \; H
    // 保存到数据库
6 s, G# K/ ~. o0 O. W    global $wpdb;
1 g1 x4 Q6 r. l/ [    $wpdb->insert(
% U1 X( V2 `; L* C# W        $wpdb->prefix . 'cf7_encrypted_data',: s8 m4 y# [) e+ L4 _8 W, `
        array(1 ?9 e0 H6 d- X( B
            'form_id' => $contact_form->id(),
6 E' G1 I+ O6 h$ m, f3 d; u            'data' => $encrypt_data,, n, W) F9 Y$ S/ n- k
            'time' => current_time('mysql')
; {! w% k8 n9 o; Z, p        ). L, c" R; x- H7 o
    );
) ]- b, @& @) @3 m4 f* K0 h}6 G" A2 Q3 G" W9 c6 [+ O. I

: x5 H! f1 V$ S5 e. `0 f5 O  }// 创建加密数据表(激活自动生成)
" x' H' O1 t3 n# X4 Sregister_activation_hook(__FILE__, 'cf7_create_encrypt_table');& }' z! D0 ?5 k7 K
function cf7_create_encrypt_table() {
4 q; l% e0 H, s% r# }    global $wpdb;' J: }2 U! e* f0 p) K5 u9 d7 ~
    $table = $wpdb->prefix . 'cf7_encrypted_data';
8 Q. f+ l* a) e  P. K, \3 m    $charset = $wpdb->get_charset_collate();
% A7 r: L: c5 t7 |4 Z5 ^    $sql = "CREATE TABLE $table (
! @# M! w* c! S2 ~( }% M% h# x        id INT AUTO_INCREMENT PRIMARY KEY,
) N- T& f7 @0 K        form_id INT,3 T/ ~% g! ?  G: D
        data LONGTEXT,# G: i: E1 N1 ^
        time DATETIME' E" B0 V! I( D& g) V
    ) $charset;";
! Q! t0 W: x8 z0 b    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
* l! ]! s+ p) P) M) e3 t! O- ^    dbDelta($sql);
% A* o2 ]7 Y, M! l* F$ m+ g3 j7 x7 p8 r}
7 J3 y/ Q7 ^% _9 ^/ O6 K- u# V  i6 u) ~& j4 C; X: I* E# f8 v
// ========================) v% m% U2 ]( z/ {% c7 i7 o
// 前台密码查看短代码
; y0 E4 j: E8 J& g2 f1 \// ========================  g3 p3 f# J. j+ k  x/ E
add_shortcode('cf7_secure_view', 'cf7_password_protect_view');
; q$ T( j* p3 D$ V) ^# b- {' m$ rfunction cf7_password_protect_view() {
0 \) u+ @0 q$ \* g    $view_password = '你的查看密码'; // 改这里!1 B. L, b- T8 U4 ~& y/ L
    $encrypt_key = '你的自定义加密密码'; // 和上面保持一致, W5 ]4 G% m. O1 O( |
    0 }4 g  W# B$ Q2 j+ J3 f
    ob_start();2 z$ y. ^8 Y7 k/ ~5 B
      ]1 q8 ~; W. p. x7 ]- z( L, K
    // 验证密码! q9 e: g. ^( o4 U% }7 J! r% ?) q
    $pass = $_POST['cf7_pass'] ?? '';" t: J. {: S4 q6 x6 [) E
    if ($pass !== $view_password) {% f1 O' W& T: u7 ?. q
        echo '<h3>请输入查看密码</h3>';  v, u9 r* ~8 J) E6 y' z6 W! j
        echo '<form method="post"><input type="password" name="cf7_pass" required><button type="submit">查看</button></form>';
. D( J3 l- Z7 Z7 f$ |, M/ i; r4 o        return ob_get_clean();
. k6 ?+ U) {+ c& w8 X' B# t    }; b! E  B8 _% w" A% ]
    - F# Q6 Q/ C5 E( _9 \; X
    // 密码正确 → 读取并解密数据
, S5 h8 T+ q" G9 r3 l' `    global $wpdb;
8 l) Y& P4 t% g    $table = $wpdb->prefix . 'cf7_encrypted_data';
% @# R- f9 S' E7 y" y# C, u/ `    $datas = $wpdb->get_results("SELECT * FROM $table ORDER BY id DESC");
* H5 m- M. C* s, C   
  z* f5 k$ z" c5 ]2 _$ R    echo '<h3>✅ 密码正确,表单数据如下:</h3><div style="padding:15px; background:#f5f5f5;">';
4 J/ O/ ~4 s( V- J    foreach ($datas as $item) {9 n( Q8 N+ n8 b, `
        $decrypt = openssl_decrypt($item->data, 'AES-256-CBC', md5($encrypt_key), 0, substr(md5($encrypt_key), 0, 16));
+ \& t' h, \0 }9 W, i$ {, w) A+ L" N        $form_data = json_decode($decrypt, true);7 n& {$ ~+ x" S" n; V
        echo '<p><strong>时间:' . $item->time . '</strong></p>';
) ?0 H4 u7 H& E" w% ?4 K% D        foreach ($form_data as $k => $v) {4 P; R# W! ~! i5 ~5 r
            echo $k . ':' . $v . '<br>';$ s7 `$ r1 k- E
        }
7 I( e0 z6 ~( D* B; h, `) n& g        echo '<hr>';
+ l+ o% s3 Y/ @& O+ x# l3 Z% C    }) y' Q6 v# y1 S; r( p" w5 Q5 W6 J
    echo '</div>';! U1 \/ Q5 l; n% c
      b1 \( ]- f8 F4 G" i: c  [
    return ob_get_clean();
& `; D0 o. y4 p. P}( e: N8 Q" B' z1 r8 _$ U% {
```
3 n5 j8 B* V( ^0 ]$ B. \) [, Y# u9 ?
### 4. 使用方法
  v1 _4 E/ S/ F1 C- g" Z$ N: q1. 修改代码里的两个密码:" G9 b6 V' ^# u9 P% L
   - `你的查看密码`:前台输入的密码
3 r0 Y6 C" q3 L0 O   - `你的自定义加密密码`:后台加密密钥(自己记住)1 k+ U9 c' Y/ _" f9 \
2. 新建页面 → 插入短代码:
8 e) P5 T( _  o- s4 r3 F   ```( j1 G5 s+ F. J; S9 f0 l8 Y
   [cf7_secure_view]1 Q4 g8 V" y3 j5 k! e
   ```
. J2 c2 b7 H9 q2 a3. 发布页面 → **必须输入密码才能查看加密的表单数据*** Y. B  a+ M/ f4 ?: j$ y: X

) r+ o4 n+ _7 V) B5 G. n✅ 优点:
1 |5 k* v$ B  e# ?0 o- 数据**加密存储**,无法直接从数据库读取. e6 T, W: ]5 {
- 独立密码,和 WordPress 账号无关: V5 Y5 B! s! F$ |: I" ~; P6 M5 l
- 可查看所有表单提交记录
0 w% p, d8 R- u0 O5 p- 安全级别高  S2 Z# P" w" n/ m7 x: ?; H" B7 M
0 V7 c9 y& D! d0 j% E7 {7 n$ O
---9 h% s  K, v, T, A
3 W* L: @( V0 }# I6 C' j
## 方案三:极简版 - 仅管理员+密码查看(无加密)
7 G: p! w4 X7 w7 e% Y如果你只需要**简单密码验证**,不需要加密,用这个超短代码:
, s- K  ?+ e( D5 {" f, M9 F, @( e3 ^  ?
```php
# Q% R2 F/ l8 ?- s1 l/ y9 Nadd_shortcode('cf7_protected_data', 'cf7_protected_data_func');4 n3 V5 ]& l9 D; W  @4 ]
function cf7_protected_data_func() {
$ y1 W+ b: K6 F  m% ?    $password = '123456'; // 查看密码: W8 k7 }2 o7 o% H
    if (!isset($_POST['cf7_check_pass']) || $_POST['cf7_check_pass'] !== $password) {. g9 W. r) {; t& ^2 n5 Q5 w
        return '<form method="post"><input name="cf7_check_pass" type="password" placeholder="输入密码查看"><button>提交</button></form>';- c7 `8 g" [+ S3 I+ _3 U+ l# x
    }0 h$ X0 t. m  h) B8 G& x8 z! w
    ob_start();$ H7 h2 a# U& `  C' C. l
    echo '<h3>表单提交记录</h3>';
9 Y1 X: x4 V% ?0 v    global $wpdb;  C" B4 w3 r  D) y! \
    $posts = get_posts(array('post_type' => 'flamingo_inbound', 'posts_per_page' => -1));' u+ D& ?) {$ g7 F$ F
    foreach ($posts as $p) {
% B3 u& Z0 S9 V$ O5 g        echo '<p>' . $p->post_date . ':' . wp_strip_all_tags($p->post_content) . '</p><hr>';$ T( `: W( B1 u+ @5 |4 c) r4 y/ w
    }8 u, A; L6 T4 E4 O& f) a
    return ob_get_clean();
( q- v4 v4 Q4 G/ D: y5 [}( W; B+ m2 }! X# I3 N1 v& K1 a
```. f, p* @. w3 I" h
使用:`[cf7_protected_data]`7 }$ o+ v# a6 R1 P1 C6 T

) A" G1 v  `6 o3 X# ]1 k---
9 ~- U. R3 h9 [2 Z( y1 p0 Z
& N1 T1 G& W) [; t* K9 M1 m# 最终推荐选择3 P; u% @9 w; X' v
1. **新手/简单需求** → 方案一(Flamingo + 密码页面)8 G3 ?6 C% g. ]3 D
2. **安全/保密数据** → 方案二(加密存储 + 独立密码验证)
$ x6 A# u& h8 S0 G. s- O5 n# t3. **快速临时使用** → 方案三(极简密码验证)
; k1 L$ H6 j+ s  F7 I9 G5 K: g8 b, I1 N0 l) `
---8 k9 [5 _3 f& R. X- h3 r1 u

6 ?- l$ X( z1 w6 P* y### 总结- Q3 ~% B2 l: a; a9 y2 B
1. Contact Form 7 **本身不存数据**,必须用 Flamingo 或自定义存储
" y7 M8 J7 u3 Y" `2 m2. 三种方案都能实现:**输入正确密码才能查看表单信息**
0 R7 y3 U; I, M3. 方案二安全性最高,数据加密存储,无密码无法查看3 F: a! H  u5 w0 A* M/ C
4. 全部可直接复制使用,无需懂代码
$ U" _5 B; k4 Z+ x4 I$ S) l& |" G( {8 t$ C. @! e
需要我帮你**定制样式**、**限制只能管理员查看**、或**支持多表单分开查看**吗?
欢迎定制:13928122889
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|通达创业无忧交流社区 ( 粤ICP备2023021749号|粤公网安备 44030402006137号 )

GMT+8, 2026-6-18 18:45 , Processed in 0.018517 second(s), 3 queries , Redis On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表