如何获取Contact Form 7提交者不可修改用户名及在Flamingo中查看?
解决Contact Form 7获取不可修改提交者用户名的方案
一、借助Flamingo插件实现
Flamingo可自动关联登录用户的身份信息,无需保留表单里可修改的用户名字段,操作步骤如下:
- 删除表单中原有的
[text* your-name default:user_login]字段,用户无需看到或编辑用户名。 - 在Contact Form 7的邮件模板里直接使用
[user_login]标签,提交时会自动填充当前登录用户的用户名,且用户无法修改。 - 若要在Flamingo收件箱里单独显示该字段,可在表单的「附加设置」中添加代码:
另外,Flamingo默认会在每条提交记录的「用户」栏显示登录用户的信息,不用额外设置也能直接查看提交者身份。on_sent_ok: "wpcf7_add_posted_data('user_login', '" . wp_get_current_user()->user_login . "');"
二、自定义代码方案(无需额外插件)
不想依赖Flamingo的话,可通过以下两种方式实现:
方法1:添加隐藏字段
移除原用户名字段,替换为隐藏字段,自动填充登录用户名且用户不可见:
[hidden your-username default:user_login]
之后在邮件模板里用[your-username]调用该字段即可。
方法2:通过PHP钩子注入
在主题的functions.php文件中添加以下代码,表单提交前自动把登录用户名写入提交数据:
add_action( 'wpcf7_before_send_mail', 'inject_login_username_to_cf7' ); function inject_login_username_to_cf7( $contact_form ) { if ( is_user_logged_in() ) { $submission = WPCF7_Submission::get_instance(); if ( $submission ) { $current_user = wp_get_current_user(); $posted_data = $submission->get_posted_data(); $posted_data['user_login'] = $current_user->user_login; $submission->set_posted_data( $posted_data ); } } }
然后在CF7邮件模板里用[user_login]就能获取到不可修改的用户名。
额外提示
如果要求必须登录才能提交表单,可在CF7的「附加设置」里添加:
require:user-logged-in
避免未登录用户提交时出现用户名缺失的情况。
内容的提问来源于stack exchange,提问作者kleiguen
相关产品推荐
相关产品推荐

