Attach pdf from dynamic url

时间:2020-10-10 作者:user7734861

当我保存自定义帖子时,我想通过电子邮件发送PDF作为附件。

我试过了:

function my_custom_save_post( $post_id, $post, $update )  {

    if( ! $update ) { return; }
    if( wp_is_post_revision( $post_id ) ) { return; }
    if( defined( \'DOING_AUTOSAVE\' ) and DOING_AUTOSAVE ) { return; }
    if( $post->post_type != \'MYCUSTOMPOST\' ) { return; }
$url = wp_nonce_url( admin_url( "myCustomUrl" ), \'my_nounce_name\' );
    $url = file_get_contents($url);
    $attachments = array( $url );
    $headers = \'From: My Name <[email protected]>\' . "\\r\\n";
    wp_mail( \'[email protected]\', \'subject\', $url, $headers, $attachments );
}
add_action( \'save_post\', \'my_custom_save_post\', 10, 3 );
“引用”;myCustomUrl“;未以结束。pdf格式

起初我开始不把$url = file_get_contents($url); 我收到了一封带有书面URl的电子邮件(感谢$url 在里面wp_mail()) 但没有文件。URL有效,如果我打开链接,我可以看到我的文件。具有$url = file_get_contents($url); 我没有收到电子邮件

请问怎么做?

1 个回复
SO网友:Ivan Shatsky

你可以试着用两种方法来做。

第一个更简单的方法是将一个临时PDF文件保存在某处,例如uploads 目录,将其用作附件,如果在调用wp_mail() 功能是:

function my_custom_save_post( $post_id, $post, $update )  {
    if( ! $update ) { return; }
    if( wp_is_post_revision( $post_id ) ) { return; }
    if( defined( \'DOING_AUTOSAVE\' ) and DOING_AUTOSAVE ) { return; }
    if( $post->post_type != \'MYCUSTOMPOST\' ) { return; }
    $url = wp_nonce_url( admin_url( "myCustomUrl" ), \'my_nounce_name\' );
    $contents = file_get_contents( $url );
    # here temporary file name is a fixed string
    # but it better to be some unique string
    # (use current timestamp, post ID, etc)
    $tempfile = ABSPATH . \'uploads/filename.pdf\';
    file_put_contents( $tempfile, $contents );
    $attachments = array( $tempfile );
    $headers = \'From: My Name <[email protected]>\' . "\\r\\n";
    wp_mail( \'[email protected]\', \'subject\', $url, $headers, $attachments );
    unlink( $tempfile );
}
add_action( \'save_post\', \'my_custom_save_post\', 10, 3 );
第二个只是猜测,需要测试。WordPress依赖PHPMailer 用于发送电子邮件的组件。该组件具有addStringAttachment 方法,该方法允许将分配给PHP变量的二进制对象作为电子邮件文件附件附加。Here 是关于这个话题的问题。我看不出有什么办法可以通过wp_mail() 但理论上,你可以通过phpmailer_init 挂钩:

function my_attach_pdf( $mailer_instance ) {
    $url = wp_nonce_url( admin_url( "myCustomUrl" ), \'my_nounce_name\' );
    $contents = file_get_contents( $url );
    $mailer_instance->addStringAttachment( $contents, \'your_file_name.pdf\' );
}
function my_custom_save_post( $post_id, $post, $update )  {
    if( ! $update ) { return; }
    if( wp_is_post_revision( $post_id ) ) { return; }
    if( defined( \'DOING_AUTOSAVE\' ) and DOING_AUTOSAVE ) { return; }
    if( $post->post_type != \'MYCUSTOMPOST\' ) { return; }
    $headers = \'From: My Name <[email protected]>\' . "\\r\\n";
    add_action( \'phpmailer_init\', \'my_attach_pdf\' );
    wp_mail( \'[email protected]\', \'subject\', $url, $headers, $attachments );
    remove_action( \'phpmailer_init\', \'my_attach_pdf\' );
}
add_action( \'save_post\', \'my_custom_save_post\', 10, 3 );
我真的很好奇第二种方法是否有效。也许有一天会对它进行测试。如果你测试它,请给出一些反馈。

相关推荐

No url when downloading PDF

我有一个受密码保护的网页,用户可以在其中下载PDF。当点击下载按钮时,通过创建URL上传PDF,这很好,但URL对每个人都可见。如何防止这种情况,并获得下载按钮,要求保存PDF而不是打开URL页面。有插件或其他简单的技巧吗?我可能错过了什么。感谢您的支持,荷兰的问候。埃里克