我使用 WordPress 中的 Contact Form 7 插件在联系表单中设置了几个字段。其中一个字段是电话号码字段。当人们输入电话号码时,除非他们故意输入空格、连字符或括号,否则它会将号码输出为不带空格的 10 位数字字符串,例如 4445551212,而不是我想要的,这会更容易阅读,例如 444-555-1212 甚至只是 444 555 1212。
我将有关如何执行此操作的问题发布到 Wordpress 中的 CF7 论坛。我收到的是一段代码,每 3 位数字添加一个逗号,这没有帮助。
我被发送到此页面,了解如何自定义邮件标签替换:https://contactform7.com/2019/12/08/customizing-mail-tag-replacement/
具体来说,我添加的代码确实可以添加逗号,是这样的......
add_filter( 'wpcf7_mail_tag_replaced',
function( $replaced, $submitted, $html, $mail_tag ) {
if ( 'your-number' == $mail_tag->field_name() ) {
if ( is_numeric( $submitted ) ) {
$replaced = number_format( $submitted );
}
}
return $replaced;
},
10, 4
);
但是,就像我提到的,添加逗号对我没有任何好处。
因此,技巧是如果用户没有添加空格甚至破折号,则添加这些内容,但如果用户确实添加了空格、破折号或括号,则不要更改任何内容。
此外,这只会更改发送到电子邮件的输出。这将是一个很好的开始,但我想知道是否有一种方法可以更改发送到其他数据介质的输出。例如,我正在使用 CF7 转 PDF 插件,该插件从表单获取数据并将其输出到 PDF,该 PDF 附加到发送的电子邮件中。
关于我可以从哪里开始做这件事有什么想法吗?谢谢!
以下是实现此目标的方法:
// Add this code to your theme's functions.php or a custom plugin
add_filter( 'wpcf7_mail_tag_replaced', 'cf7_custom_format_phone_number', 10, 4 );
add_filter( 'wpcf7_mail_components', 'cf7_custom_format_phone_number_in_mail', 10, 3 );
function cf7_custom_format_phone_number( $replaced, $submitted, $html, $mail_tag ) {
if ( 'your-number' == $mail_tag->field_name() ) {
// Remove non-numeric characters to get a clean phone number
$cleaned_number = preg_replace('/[^0-9]/', '', $submitted);
// Format the phone number
if ( strlen($cleaned_number) === 10 ) {
$formatted_number = substr($cleaned_number, 0, 3) . '-' . substr($cleaned_number, 3, 3) . '-' . substr($cleaned_number, 6, 4);
$replaced = $formatted_number;
}
}
return $replaced;
}
function cf7_custom_format_phone_number_in_mail( $components, $contact_form, $mail ) {
// Check if there is a phone number field in the form
if ( isset( $components['body'] ) && isset( $components['raw'] ) ) {
// Apply formatting only to the email content, not the raw data
$formatted_content = preg_replace_callback(
'/\[your-number([^\]]*)\]/',
function ( $matches ) {
$number = $matches[1];
$cleaned_number = preg_replace('/[^0-9]/', '', $number);
if ( strlen($cleaned_number) === 10 ) {
return substr($cleaned_number, 0, 3) . '-' . substr($cleaned_number, 3, 3) . '-' . substr($cleaned_number, 6, 4);
}
return $number; // Return the original number if it doesn't match the format
},
$components['body']
);
// Update the email content with the formatted phone number
$components['body'] = $formatted_content;
}
return $components;
}
custom_format_phone_number
功能可根据需要格式化电话号码。它首先删除所有非数字字符,然后检查清理后的数字是否有 10 位数字,然后再使用破折号对其进行格式化。此功能用于修改电子邮件中显示的数据。
custom_format_phone_number_in_mail
功能用于修改邮件内容。它使用正则表达式查找 [your-number]
邮件标签,并将其替换为格式正确的电话号码。
这两个功能协同工作,以确保格式应用于电子邮件内容而不仅仅是原始数据。这将确保 CF7 转 PDF 插件也能收到格式正确的电话号码。
确保将
'your-number'
替换为联系表 7 中您的电话号码字段的实际名称或标签。此外,请记住进行彻底测试,以确保代码在您的特定设置中按预期工作。