如何将Elementor Pro表单的submission_id添加至邮件主题与内容?
如何在Elementor Pro表单邮件中添加Submission ID(工单式编号)
需求背景
使用Elementor Pro表单作为联系表单,希望将表单提交的submission_id添加到邮件标题和正文,实现类似工单系统的效果(示例:来自xxx的新邮件 - ID: 4566334)。此前尝试自定义短代码获取ID但无效,排查发现依赖$_POST参数的逻辑在邮件渲染阶段已无法获取数据,且不想使用付费插件。
解决方案:使用Elementor表单官方钩子
Elementor Pro提供了专门的表单钩子,可在邮件准备阶段直接获取已生成的submission_id,无需依赖$_POST参数。以下是具体实现代码:
1. 给邮件标题追加Submission ID
将以下代码添加到主题的functions.php文件中:
add_action( 'elementor_pro/forms/email/prepare_content', 'append_submission_id_to_email_subject', 10, 3 ); function append_submission_id_to_email_subject( $message, $form, $record ) { // 获取提交记录ID $submission_id = $record->get( '_id' ); if ( empty( $submission_id ) ) { return $message; } // 给原标题追加ID标识 $original_subject = $form->settings['email_subject']; $form->settings['email_subject'] = "{$original_subject} - ID: {$submission_id}"; return $message; }
2. 在邮件正文中插入Submission ID
如果需要在邮件正文中显示ID,可添加以下代码(同样放入functions.php):
add_action( 'elementor_pro/forms/email/prepare_content', 'insert_submission_id_to_email_body', 10, 3 ); function insert_submission_id_to_email_body( $message, $form, $record ) { $submission_id = $record->get( '_id' ); if ( empty( $submission_id ) ) { return $message; } // 将邮件内容中的{submission_id}占位符替换为实际ID return str_replace( '{submission_id}', $submission_id, $message ); }
使用说明
- 配置邮件标题:在Elementor表单的邮件设置中,填写正常的标题内容即可,代码会自动在标题末尾追加
- ID: [编号]。 - 配置邮件正文:在邮件正文中任意位置插入
{submission_id}占位符,提交表单后该占位符会自动替换为实际的提交ID。
原短代码失效原因
之前的短代码依赖$_POST参数获取表单信息,但邮件内容渲染时,表单提交的POST请求已经结束,$_POST中的参数已不存在,因此无法获取到提交数据和ID。而使用Elementor官方钩子,能直接拿到表单提交的记录对象,其中已包含生成好的submission_id,确保数据有效。
内容的提问来源于stack exchange,提问作者ExoGeniA
相关产品推荐
相关产品推荐

