求助:无法将Contact Form 7已保存附件URL添加至Flamingo收件消息
解决方案:将WordPress附件URL添加到Flamingo收件消息
我来帮你搞定这个问题——要让Flamingo显示你保存的附件URL,核心是在CF7提交流程中,把附件URL追加到提交数据里,这样Flamingo就能自动捕获并展示这些信息了。下面是具体的实现步骤和代码:
关键思路
Flamingo是基于Contact Form 7的提交数据来保存消息的,所以我们需要在邮件发送前修改提交数据,把生成的附件URL插入进去,之后Flamingo就会把这些URL包含到它存储的消息中。
完整代码实现
把下面的代码添加到你的主题functions.php文件里,或者使用自定义代码插件:
// 保存CF7表单数据并将附件URL添加到Flamingo消息 function cf7_save_attachments_and_update_flamingo($WPCF7_ContactForm) { // 获取当前提交实例 $submission = WPCF7_Submission::get_instance(); if (!$submission) return; // 获取提交数据和上传的文件 $posted_data = $submission->get_posted_data(); $uploaded_files = $submission->uploaded_files(); // 存储附件URL的数组 $attachment_urls = []; // 处理表单中的文件字段(替换成你实际的字段名,比如'user-resume') $file_field_name = 'your-file-field'; if (isset($uploaded_files[$file_field_name])) { $temp_file_path = $uploaded_files[$file_field_name]; // 将临时文件保存为WordPress附件 $attachment_id = media_handle_upload($file_field_name, 0); // 检查附件是否保存成功 if (!is_wp_error($attachment_id)) { // 获取附件的永久URL $attachment_url = wp_get_attachment_url($attachment_id); $attachment_urls[] = $attachment_url; } } // 如果有附件URL,更新提交数据 if (!empty($attachment_urls)) { // 把多个URL用换行分隔(也可以用逗号或其他分隔符) $posted_data['saved-attachment-urls'] = implode("\n", $attachment_urls); // 更新提交数据,让Flamingo捕获这个字段 $submission->set_posted_data($posted_data); } } // 挂钩到CF7发送邮件前的动作 add_action('wpcf7_before_send_mail', 'cf7_save_attachments_and_update_flamingo');
配置说明
- 替换字段名:把代码中的
your-file-field替换成你CF7表单里的文件字段的名称(比如你表单里的字段是[file resume],这里就填resume)。 - 多文件处理:如果表单有多个文件字段,复制处理单个字段的代码块,修改对应的字段名即可。
- 在CF7邮件中显示:如果你想在CF7发送的邮件里也显示这些URL,可以在邮件模板中添加
[saved-attachment-urls]标签。
验证效果
提交表单后,你可以:
- 检查WordPress媒体库,确认附件已经成功上传。
- 打开Flamingo的收件箱,查看对应的消息详情,你会看到新增的
saved-attachment-urls字段,里面包含了附件的URL。
内容的提问来源于stack exchange,提问作者Rami Alloush




