如何通过代码在Contact Form 7中添加自定义邮件内容?问题排查
解决Contact Form 7发送邮件前添加自定义消息到正文的问题
你的代码存在几个关键错误,导致无法正常添加自定义消息,以下是问题分析和修正方案:
问题点
- 钩子参数顺序错误:
wpcf7_mail钩子的回调参数顺序应为$mail(邮件配置数组)在前,$contact_form(表单对象)在后,原代码顺序颠倒,无法正确读取邮件内容。 - 未返回修改后的邮件数组:回调函数必须返回修改后的邮件配置,否则CF7不会应用你的修改。
- 变量未定义:
$field_name和$field_value未声明,需要从表单提交数据中获取具体字段值。 - str_replace参数缺失:
str_replace需要三个参数(搜索值、替换值、目标字符串),原代码缺少目标字符串参数。
修正后的代码
add_action( 'wpcf7_mail', 'my_custom_contact_form_7_mail_function', 10, 2 ); function my_custom_contact_form_7_mail_function( $mail, $contact_form ) { // 获取表单提交的所有字段数据 $posted_data = $contact_form->get_posted_data(); // 替换为你表单中的实际字段名,比如"your-name"或"email" $target_field = 'your-name'; $field_value = isset( $posted_data[$target_field] ) ? $posted_data[$target_field] : '未填写'; // 构建自定义消息 $custom_message = '这是我的自定义消息。'; $custom_message .= ' ' . $target_field . ': ' . $field_value; // 将邮件正文中的[custom-message]替换为自定义内容 if ( isset( $mail['body'] ) ) { $mail['body'] = str_replace( '[custom-message]', $custom_message, $mail['body'] ); } // 必须返回修改后的邮件配置,CF7才会使用修改后的内容 return $mail; }
注意事项
- 请将代码中的
$target_field值替换为你表单里的实际字段名(比如你的表单字段是name就改成name)。 - 你的邮件设置中已经添加了
[custom-message]标签(从截图可见),这部分无需修改。 - 将修正后的代码添加到主题的
functions.php文件后,测试表单提交即可看到自定义消息出现在邮件正文中。

内容的提问来源于stack exchange,提问作者Akhilesh Saini
相关产品推荐
相关产品推荐

