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

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

[复制链接]

462

主题

653

回帖

4343

积分

管理员

积分
4343
QQ
发表于 昨天 09:35 | 显示全部楼层 |阅读模式
# 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
需要我帮你**定制样式**、**限制只能管理员查看**、或**支持多表单分开查看**吗?
欢迎定制:13928122889
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-28 02:31 , Processed in 0.020831 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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