Вложение сообщения электронной почты в wp вставить действие после публикации


У меня есть форма интерфейса, которая использует wp_insert_post() для программной вставки сообщений на сайт со статусом "в ожидании". Я также использую insert_attachment(), чтобы прикрепить отправленный файл к сообщению.

Теперь я пытаюсь написать код для автоматической отправки содержимого публикации (включая вложения) администратору сайта по электронной почте. Вот код, который я использую для этого в functions.php файл:

// Notify admin on post insert (pending)
add_action('wp_insert_post', 'send_email_on_pending_post_creation' );
function send_email_on_pending_post_creation( $post_id){
$post_title = get_the_title( $post_id );
$post_url = get_permalink( $post_id );
$post_content = get_post_field('post_content', $post_id);
$subject = 'New post pending!';

$message = "A new post is pending on the website:";
$message .= "<br><br>";
$message .= "<strong>Post Title: </strong>";
$message .= "<a href='" . $post_url . "'>" .$post_title. "</a>";
$message .= "<br><br>";
$message .= "<strong>Post Content:</strong><br>";
$message .= $post_content;
$message .= "<br><br>";

//$attachments = get_attached_media( 'image' );

$attachments = get_the_post_thumbnail( $post_id, 'full' );

$msg_headers = array('Content-Type: text/html; charset=UTF-8', 'From: "Website" < [email protected] >');

//send email to admin
wp_mail( '[email protected]', $subject, $message, $msg_headers, $attachments );
}

Теперь проблема в том, что, хотя электронное письмо отправленное с заголовком сообщения и содержимым, вложение не отправляется. Кроме того, выполнение var_dump ($вложения) после отправки электронного письма заканчивается тем, что оно оказывается пустым.

Пожалуйста, помогите мне понять, что я делаю неправильно и что нужно сделать.

Спасибо вам!

РЕДАКТИРОВАТЬ: Наконец-то найдено решение. Пожалуйста, проверьте мой ответ ниже, если вы столкнетесь с этой проблемой.

Author: Avinash Kumar, 2014-09-26

1 answers

Задав этот вопрос в нескольких местах и не получив решения, я сам нашел решение сегодня утром.

Вместо того, чтобы подключать функцию send_email_on_pending_post_creation к действию "wp_insert_post", вам нужно подключить ее к действию "add_attachment", которое происходит ПОСЛЕ вставки сообщения и при добавлении вложения в сообщение. Вам также необходимо обновить код в функции send_email_on_pending_post_creation, чтобы получить post_parent (идентификатор родительского сообщения, к которому прикреплено вложение), чтобы post_title, post_url и post_content переменные возвращают правильные значения.

Вот обновленная функция send_email_on_pending_post_creation, которая отправляет администратору электронное письмо со ссылкой на вложение.

add_action('add_attachment', 'send_email_on_pending_post_creation' );

function send_email_on_pending_post_creation( $post_id ){
$attachment = get_post($post_id);
$attachment_title = get_the_title($post_id);

$parent_id = $attachment->post_parent;

$post_title = get_the_title( $parent_id );
$post_url = get_permalink( $parent_id );
$post_content = get_post_field('post_content', $parent_id);

$subject = 'New post pending!';

$attachments = wp_get_attachment_url($post_id);

$message = "A new post is pending on the website:";
$message .= "<br><br>";
$message .= "<strong>Post Title: </strong>";
$message .= "<a href='" . $post_url . "'>" .$post_title. "</a>";
$message .= "<br><br>";
$message .= "<strong>Post Content:</strong><br>";
$message .= $post_content;
$message .= "<br><br>";
$message .= "<strong>Attachment:</strong><br><br>";
$message .= "<a href='". $attachments . "' title='". $attachment_title . "'>" . $attachment_title . "</a>";
$message .= "<br><br>";

$msg_headers = array('Content-Type: text/html; charset=UTF-8', 'From: "Website" < [email protected] >');

//send email to admin
wp_mail( '[email protected]', $subject, $message, $msg_headers, $attachments );
}

Надеюсь, это кому-нибудь поможет!

 1
Author: Avinash Kumar, 2014-10-22 08:00:46