第一次在 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_statuspending_to_publishpost_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); 现在可以使用了