隐藏电子邮件中的空白字段 - 联系表单7

时间:2017-02-06 16:29:48

标签: wordpress email contact-form-7

我几乎整天都在寻找答案,但没有任何帮助..

我使用Contact Form 7制作了一个大表格,但表格的某些部分会隐藏,具体取决于您的选择。例如,如果您选择“2人”,则会显示两个部分。

但是,如果我填写一个人的字段(因此其他字段为空并隐藏),则字段将显示在电子邮件中。我只想查看电子邮件中填写的字段。

如果我有点不清楚,我很抱歉。可以请一些帮助。

3 个答案:

答案 0 :(得分:3)

解决!

我自己找到了一个解决方案,已经在联系表7中。电子邮件中的字段不在同一行,所以当我检查"从输出中删除带有空白邮件标签的行时# 34;什么都没发生。我已将它全部放在同一条线上,现在它可以正常工作。

答案 1 :(得分:0)

尝试将此添加到functions.php文件中:

add_filter( 'wpcf7_mail_components', 'remove_blank_lines' );

function remove_blank_lines( $mail ) {
    if ( is_array( $mail ) && ! empty( $mail['body'] ) )
        $mail['body'] = preg_replace( '|\n\s*\n|', "\n\n", $mail['body'] );

    return $mail;
}

我在此处找到了这个代码段:https://wordpress.org/support/topic/plugin-contact-form-7-how-to-do-away-with-blank-lines-in-email-for-unfilled-form-items/
根据您设置电子邮件的方式,这可能不起作用,因为这样只会删除空行。如果这对您有用,请告诉我,如果没有,请提供您电子邮件正文中的代码,发送的示例电子邮件也不错。

答案 2 :(得分:0)

实际上,您需要使用

实现自己的自定义电子邮件正文组件
    add_filter('wpcf7_mail_components','my_custom_mail', 10,2);
    function my_custom_mail($mail_component, $contact_form){
      $mail_component['subject']; //email subject
      $mail_component['sender']; //sender field (from)
      $mail_component['body']; //email body
      $mail_component['recipient']; //email recipient (to)
      $mail_component['additional_headers']; //email headers, cc:, bcc:, reply-to:
      $mail_component['attachments']; //file attachments if any

      $key_values = array();
      $tags = $contact_form->scan_form_tags(); //get your form tags
      foreach($tags as $tag){
        $field_name  = $tag['name'];
        if(isset($_POST[$field_name]) && !empty($_POST[$field_name])){
          //get all the submitted fields form your form
          $key_values[$field_name] = $_POST[$field_name]; 
        }
      }
      //you have all the submitted field-name => value pairs in the array $key_values
      //you can now reset you email body
      $body = "Dear ".$key_values['your-name'].',';
      ...
      $mail_component['body'] = $body;
      return $mail_component;
    }