你可以试着用两种方法来做。
第一个更简单的方法是将一个临时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 );
我真的很好奇第二种方法是否有效。也许有一天会对它进行测试。如果你测试它,请给出一些反馈。