Вы можете попробовать сделать это двумя способами.
Первый, гораздо более простой, — сохранить где-нибудь временный PDF-файл, например в
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 );
directory, use it as attachment and delete if after the call to
phpmailer_init
функция сделана:
wp_mail()
Второе — всего лишь предположение, и его необходимо проверить. WordPress полагается на addStringAttachment
компонент для отправки электронных писем. Этот компонент имеет PHPMailer
метод, который позволяет прикрепить двоичный объект, назначенный переменной PHP, в качестве вложения файла электронной почты. Здесь это вопрос по этой теме. Я не вижу никакого способа, которым это можно было бы использовать через
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 );
function but in theory you can try to do it via
wp_mail()
крюк:
uploads
Мне действительно любопытно, сработает ли второй подход. Возможно, однажды проверим это. Если вы протестируете это, пожалуйста, оставьте отзыв.