WordPress Contact Form 7如何在邮件正文中传递自定义额外文本
解决方案
你可以通过给表单添加隐藏字段存储选中的额外文本,实现需求,步骤如下:
1. 修改Contact Form 7表单配置
添加一个隐藏字段用于存储选中的额外文本,修改后的表单代码如下:
<div class="form-dropdown"> <label> Your choice [select type_exam id:choice_exam include_blank "first-exam" "second-exam"] [hidden type_exam_extra id:type_exam_extra] </label> </div>
2. 调整前端jQuery逻辑
在下拉菜单切换时,同步将对应额外文本赋值给隐藏字段,同时补全原有代码缺失的语法闭合,修改后的完整代码如下:
<script> $(document).ready(function () { $('#choice_exam').change(function () { var val = $(this).val(); $('#option1').hide(); $('#option2').hide(); // 先清空隐藏字段值 $('#type_exam_extra').val(''); if (val == 'first-exam') { $('#option1').show(); $('#type_exam_extra').val($('#option1').text()); } else if (val == 'second-exam') { $('#option2').show(); $('#type_exam_extra').val($('#option2').text()); } }) }); </script>
3. 更新邮件正文配置
在邮件模板中调用隐藏字段的变量即可输出对应的额外文本,修改后的邮件正文配置如下:
Type exam: [type_exam] 额外说明:[type_exam_extra]
可选更安全的后端实现方案
如果担心前端内容被恶意篡改,可以不用前端隐藏字段,通过WordPress钩子在发送邮件前自动匹配额外文本。你只需在当前主题的functions.php文件中添加以下代码即可:
add_action('wpcf7_before_send_mail', 'add_extra_text_to_cf7_mail'); function add_extra_text_to_cf7_mail($contact_form) { $submission = WPCF7_Submission::get_instance(); if (!$submission) return; $posted_data = $submission->get_posted_data(); $type_exam = $posted_data['type_exam']; // 定义选项和额外文本的映射关系 $extra_text_map = [ 'first-exam' => 'first exam extra text...', 'second-exam' => 'second exam extra text....' ]; $extra_text = isset($extra_text_map[$type_exam]) ? $extra_text_map[$type_exam] : ''; // 获取邮件模板对象并替换内容 $mail = $contact_form->prop('mail'); $mail['body'] .= "\n额外说明:".$extra_text; $contact_form->set_properties(['mail' => $mail]); }
用这个方案不需要修改前端代码和表单配置,仅需保留原来的邮件正文配置即可。
内容的提问来源于stack exchange,提问作者anargis
相关产品推荐
相关产品推荐

