如何格式化 - 添加空格 - 联系表格 7 中的数字和电话号码输出数据 - Wordpress

问题描述 投票:0回答:1

我使用 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 附加到发送的电子邮件中。

关于我可以从哪里开始做这件事有什么想法吗?谢谢!

wordpress output contact-form-7
1个回答
0
投票

以下是实现此目标的方法:

// 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;
}
  1. custom_format_phone_number
    功能可根据需要格式化电话号码。它首先删除所有非数字字符,然后检查清理后的数字是否有 10 位数字,然后再使用破折号对其进行格式化。此功能用于修改电子邮件中显示的数据。

  2. custom_format_phone_number_in_mail
    功能用于修改邮件内容。它使用正则表达式查找
    [your-number]
    邮件标签,并将其替换为格式正确的电话号码。

  3. 这两个功能协同工作,以确保格式应用于电子邮件内容而不仅仅是原始数据。这将确保 CF7 转 PDF 插件也能收到格式正确的电话号码。

确保将

'your-number'
替换为联系表 7 中您的电话号码字段的实际名称或标签。此外,请记住进行彻底测试,以确保代码在您的特定设置中按预期工作。

输出:

© www.soinside.com 2019 - 2024. All rights reserved.