第一次在 Wordpress 中发布 post 时发送通知邮件
Send notification mail the first time a post is published in Wordpress
我正在尝试在 Wordpress 中创建证明表格和列表页面,但我在向证明作者发送电子邮件通知他他的 post 已发布时遇到了问题。
表单经过验证和处理后,它会自动创建一个待处理的 post 和 wp_insert_post()
,表单详细信息存储在高级自定义字段插件生成的文本输入中。当我单击发布按钮时,它应该向作者发送一封通知电子邮件。这是我写的函数:
function publish_post_notification($post_id){
$author = get_field('author_email', $post_id); // get author email from custom fields
if(isset($author)){
require_once('testimoniale/mail-config.php'); // PHPMailer config
$mail->addAddress($author); // Add a recipient
$mail->Subject = 'Your testimonial has been published !';
ob_start();
include('testimoniale/mail_template/notification-template.php');
$mail->Body = ob_get_contents();
$mail->AltBody = 'Your testimonial has been published !'; // Alternative text for non-html mail clients
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
ob_end_clean();
}
add_action('publish_post','publish_post_notification',10,1);
问题是当我第一次发布 post 时,它不会发送电子邮件,但是如果我之后将 post 状态更改为“待处理”和再次发布或者如果我更新 post.
我试过使用 save_post
挂钩,但是当 post 最初也是通过 wp_insert_post()
创建时它会触发,并且出于某种原因 transition_post_status
, pending_to_publish
和 post_updated
也不适合我。
有什么建议吗?
提前致谢
我发现我的代码出了什么问题:高级自定义字段中的 get_field()
函数在第一次 post 发布时没有 return 作者字段值,因此if(isset($author))
条件 return 错误。
我已将 $author = get_field('author_email', $post_id);
更改为
$author = get_post_meta($post_id, 'author_email', true);
现在可以使用了
我正在尝试在 Wordpress 中创建证明表格和列表页面,但我在向证明作者发送电子邮件通知他他的 post 已发布时遇到了问题。
表单经过验证和处理后,它会自动创建一个待处理的 post 和 wp_insert_post()
,表单详细信息存储在高级自定义字段插件生成的文本输入中。当我单击发布按钮时,它应该向作者发送一封通知电子邮件。这是我写的函数:
function publish_post_notification($post_id){
$author = get_field('author_email', $post_id); // get author email from custom fields
if(isset($author)){
require_once('testimoniale/mail-config.php'); // PHPMailer config
$mail->addAddress($author); // Add a recipient
$mail->Subject = 'Your testimonial has been published !';
ob_start();
include('testimoniale/mail_template/notification-template.php');
$mail->Body = ob_get_contents();
$mail->AltBody = 'Your testimonial has been published !'; // Alternative text for non-html mail clients
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
ob_end_clean();
}
add_action('publish_post','publish_post_notification',10,1);
问题是当我第一次发布 post 时,它不会发送电子邮件,但是如果我之后将 post 状态更改为“待处理”和再次发布或者如果我更新 post.
我试过使用 save_post
挂钩,但是当 post 最初也是通过 wp_insert_post()
创建时它会触发,并且出于某种原因 transition_post_status
, pending_to_publish
和 post_updated
也不适合我。
有什么建议吗?
提前致谢
我发现我的代码出了什么问题:高级自定义字段中的 get_field()
函数在第一次 post 发布时没有 return 作者字段值,因此if(isset($author))
条件 return 错误。
我已将 $author = get_field('author_email', $post_id);
更改为
$author = get_post_meta($post_id, 'author_email', true);
现在可以使用了