You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Contact Form 7管道分隔可选收件人选项值显示错误如何修复

问题修复方案

问题根源

Contact Form 7 的管道(|)语法默认会匹配第一个与后置值(此处为邮箱地址)一致的前置文本作为字段显示值,当多个选项共享同一个邮箱时,就会出现选中高序号同邮箱选项、却显示第一个同邮箱选项文本的问题,你遇到的错误就是该特性导致的。

修复步骤

第一步:修改表单选项配置

给每个选项的邮箱后缀加唯一标识(#加数字即可),保证所有管道后置值唯一,修改后的表单代码如下:

[group loc1]
[md-select label="department"][select* dept-loc1 include_blank
"Machine 1|testperson1@test.com#1"
"Machine 2|testperson2@test.com#2"
"Machine 3|testperson3@test.com#3"
"Machine 4|testperson1@test.com#4"
[/md-select]
[/group]

[group loc2]
[md-select label="department"][select* dept-loc2 include_blank
"Machine 5|testperson3@test.com#5"
"Machine 6|testperson1@test.com#6"
"Machine 7|testperson3@test.com#7"
[/md-select]
[/group]

第二步:添加邮箱处理钩子

将以下代码添加到WordPress主题的functions.php文件中,该代码会自动去掉邮箱后的标识,不影响邮件投递:

add_filter( 'wpcf7_posted_data', 'cf7_fix_duplicate_pipe_email', 10, 1 );
function cf7_fix_duplicate_pipe_email( $posted_data ) {
    // 处理分组1的部门字段
    if ( isset( $posted_data['dept-loc1'] ) && $posted_data['dept-loc1'] ) {
        $posted_data['dept-loc1'] = preg_replace( '/#\d+$/', '', $posted_data['dept-loc1'] );
    }
    // 处理分组2的部门字段
    if ( isset( $posted_data['dept-loc2'] ) && $posted_data['dept-loc2'] ) {
        $posted_data['dept-loc2'] = preg_replace( '/#\d+$/', '', $posted_data['dept-loc2'] );
    }
    return $posted_data;
}

效果说明

修改后CF7可以正确匹配你选中的选项文本显示在邮件内容中,邮件也会正常投递到对应邮箱,与你使用的Material Design插件的md-select标签完全兼容,无需额外调整。

内容的提问来源于stack exchange,提问作者friiitzdesign

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:45:03