DOM事件 - 在发送电子邮件后开始下载

时间:2017-06-06 09:19:56

标签: javascript php wordpress dom

我正在使用DOM代码,我想在我的Wordpresssite上使用Contact Form 7。 这是我想要做的: 在用户汇总了一些个人信息后,他们应该通过下载获得pdf。 目前我只是将它们发送到pdf位置,您可以在以下脚本中看到:

    <script>
       document.addEventListener( 'wpcf7mailsent', function( event ) {
       location = 'path_with_pdf_file';
       }, false );
    </script>

是否有一些简单的代码行我缺少开始下载? 非常感谢我能得到的每一个答案。

亲切的问候

1 个答案:

答案 0 :(得分:0)

我为您准备了3种解决方案。我认为第二个是最简单的,并按照你的要求行事。

解决方案1 ​​

在你的情况下window.location永远不会工作,除非你发出HTTP请求和设置标题告诉浏览器以八位字节流的形式处理请求。

// PHP example code
header('Content-disposition: attachment; filename=FILENAME.pdf');
header('Content-type: application/pdf');

解决方案2

您最好的选择是创建anchor元素,该元素包含您的所有下载信息,然后执行.click()方法。

让我们准备我们的功能,为我们处理一切。

function downloadFile(path) {
  var fileName = path.split('/').pop();
  // We create anchor
  var element = document.createElement('a');
  // Let's add properties to our anchor
  element.href = path;
  element.download = fileName;
  // Now we fire .click() method
  element.click();
}

document.addEventListener( 'wpcf7mailsent', function( event ) {
  downloadFile('http://domain/path/filename.pdf');
}, false );

解决方案3

为什么不通过电子邮件发送pdf?要做到这一点,我们需要挂钩wpcf7_before_send_mail行动。

以下是我使用的代码,应该使用最新的CF7

add_action("wpcf7_before_send_mail", "wpcf7_do_something_else");  
function wpcf7_do_something_else($cf7) {

  $wpcf = WPCF7_ContactForm::get_current();
  $mail = $cf7->prop('mail');
  // Use it if you need to access form Id
  // $wpcf->id;

  // Your attachment do magic here
  $mail['attachments'] .= "\nuploads/regulations.pdf";

  $cf7->set_properties( array( 'mail' => $mail ) );

  return $wpcf;
}