提交Contact Form 7时传递ACF字段的实现方案求助
解决Contact Form 7自动传递ACF员工唯一ID到隐藏字段并显示的方案
之前碰到过完全一样的需求,亲测以下步骤能搞定:
1. 在CF7表单中添加隐藏字段
打开你的服务申请表单编辑页面,直接在表单内容里插入隐藏字段:
[hidden employee-id]
这里的employee-id是字段标识,后面会用到,别乱改。
2. 用WordPress钩子动态填充ACF唯一ID
把下面的代码放到主题的functions.php文件里,或者自定义插件中(推荐后者,主题更新不丢失):
add_filter('wpcf7_form_tag', 'populate_employee_id_hidden_field', 10, 2); function populate_employee_id_hidden_field($tag, $unused) { // 只处理我们定义的隐藏字段 if ($tag['name'] !== 'employee-id' || $tag['type'] !== 'hidden') { return $tag; } // 确保用户已登录(避免未登录状态下空值) if (!is_user_logged_in()) { return $tag; } $current_user = wp_get_current_user(); // 替换成你实际的ACF字段名称,比如'employee_unique_id' $employee_unique_id = get_field('employee_unique_id', 'user_' . $current_user->ID); if ($employee_unique_id) { $tag['values'] = array($employee_unique_id); $tag['raw_values'] = array($employee_unique_id); } return $tag; }
关键注意点:
- 必须加
user_前缀:ACF获取用户字段时,要把用户ID拼在user_后面,不然拿不到值 - 确认ACF字段名:是字段设置里的“名称”(英文),不是后台显示的标签
3. 在提交结果中显示该ID
有两种常用方式:
方式一:邮件内容中显示
在CF7的「邮件」设置里,直接把[employee-id]插入到邮件模板的任意位置,比如:
员工ID:[employee-id]
提交内容:...
方式二:前端提交成功后显示
如果要在页面上给用户反馈,推荐用CF7官方的DOM事件(替代旧的on_sent_ok),把下面的代码加到主题的自定义JS里:
document.addEventListener('wpcf7mailsent', function(event) { // 替换成你的表单ID(在CF7列表里能看到) if (event.detail.contactFormId !== 123) return; const employeeIdInput = document.querySelector('input[name="employee-id"]'); if (employeeIdInput && employeeIdInput.value) { alert('提交成功!你的员工ID:' + employeeIdInput.value + '已同步记录'); // 也可以用自定义弹窗替换alert,比如插入到页面指定位置 // document.getElementById('success-message').textContent = '提交成功!员工ID:' + employeeIdInput.value; } }, false);
排查之前失败的常见坑
- 缓存问题:如果用了缓存插件,要清除CF7表单页面的缓存,或者把表单页面加入缓存排除列表
- 权限问题:确保当前登录用户的ACF字段有读取权限(ACF设置里检查字段的可见权限)
- 字段类型:如果你的ACF字段是自定义格式,要确认
get_field返回的是字符串,不是数组或对象
内容的提问来源于stack exchange,提问作者Dilion Smith
相关产品推荐
相关产品推荐

