You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在WordPress中用PHP生成会话随机码及CF7提交后展示方法

解决WordPress会话随机码+Contact Form 7 提交后展示问题

嘿,这两个需求我帮你一步步搞定,操作起来很清晰:

一、为每个会话生成唯一随机码的PHP实现

首先,我们要确保同一个用户会话里只生成一次随机码(刷新页面不会变),可以用PHP的会话机制来实现:

  1. 把下面的代码添加到你的主题functions.php文件里,或者自定义插件中:
function generate_session_random_code($length = 10) {
    // 启动会话(如果当前还没启动)
    if (!session_id()) {
        session_start();
    }
    
    // 如果会话里已经存了随机码,直接返回,避免重复生成
    if (isset($_SESSION['custom_random_code'])) {
        return $_SESSION['custom_random_code'];
    }
    
    // 定义随机码的字符集(这里用数字,你可以按需添加字母)
    $characters = '0123456789';
    $code = '';
    $char_total = strlen($characters);
    
    // 循环生成指定长度的随机码
    for ($i = 0; $i < $length; $i++) {
        $code .= $characters[mt_rand(0, $char_total - 1)];
    }
    
    // 把生成的随机码存入会话,后续调用直接取
    $_SESSION['custom_random_code'] = $code;
    return $code;
}

这个函数的作用是:启动会话→检查是否已有码→没有就生成→存入会话,确保同一个用户会话内随机码唯一。

二、Contact Form 7 配置随机码字段+提交后展示

接下来处理CF7的需求,分三步走:

1. 给CF7表单添加不可编辑的随机码字段

打开你的Contact Form7表单编辑器,添加一个动态隐藏字段,代码如下:

[hidden random_code default:shortcode_rzh_cf7_nomor]

这个字段会自动填充我们生成的随机码,用户看不到也不能编辑。

2. 完善CF7的随机码生成短代码

把下面的代码也加到functions.php里,它会调用上面的会话随机码函数,给CF7提供填充值:

function rzh_cf7_GenNomor() {
    // 调用会话随机码函数,确保每个会话唯一
    return generate_session_random_code(10);
}
// 注册成CF7可用的短代码
add_shortcode('shortcode_rzh_cf7_nomor', 'rzh_cf7_GenNomor');

3. 在指定页面展示提交的随机码

现在要让用户提交表单后,在指定页面看到自己的随机码,有两种方式:

方式一:用短代码在页面编辑器里展示

添加下面的代码到functions.php:

function display_submitted_random_code() {
    // 先启动会话
    if (!session_id()) {
        session_start();
    }
    
    // 检查会话里是否有随机码
    if (isset($_SESSION['custom_random_code'])) {
        return '<p>您提交的验证码是:' . esc_html($_SESSION['custom_random_code']) . '</p>';
    } else {
        return '<p>暂无提交的验证码</p>';
    }
}
// 注册展示用的短代码
add_shortcode('display_random_code', 'display_submitted_random_code');

然后打开你要展示的页面,在编辑器里插入[display_random_code],访问页面就能看到对应的随机码了。

方式二:直接在页面模板里硬编码展示

如果你会修改主题模板,可以直接在目标页面的模板文件里添加这段代码:

<?php
// 启动会话
if (!session_id()) {
    session_start();
}

// 输出随机码
if (isset($_SESSION['custom_random_code'])) {
    echo '<p>您提交的验证码是:' . esc_html($_SESSION['custom_random_code']) . '</p>';
    // 可选:如果只想让用户看一次,展示后销毁会话里的码
    // unset($_SESSION['custom_random_code']);
} else {
    echo '<p>暂无提交的验证码</p>';
}
?>

可选:每次提交表单生成新的随机码

如果你希望用户每次提交表单都生成新的随机码,可以添加这个钩子到functions.php:

add_action('wpcf7_mail_sent', 'regenerate_random_code_after_submit');
function regenerate_random_code_after_submit($contact_form) {
    if (!session_id()) {
        session_start();
    }
    // 销毁旧的随机码,下次访问会生成新的
    unset($_SESSION['custom_random_code']);
}

内容的提问来源于stack exchange,提问作者Himanshu Borah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:32:39