第一次在Wordpress中发布帖子时发送通知邮件

时间:2015-09-22 22:59:13

标签: php wordpress email advanced-custom-fields

我正在尝试在Wordpress中创建一个推荐表单和列表页面,并且我在向推荐作者发送电子邮件时遇到问题,并通知他他的帖子已发布。

在验证并处理表单后,它会自动创建一个包含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);

问题是当我第一次发布帖子时,它没有发送电子邮件,但是如果我之后将帖子状态更改为待定并再次发布或者我更新帖子。

我已尝试使用save_post挂钩,但在最初通过wp_insert_post()创建帖子时会触发,并且出于某种原因transition_post_status,{{1} } pending_to_publish也不适合我。

有什么建议吗?

提前致谢

1 个答案:

答案 0 :(得分:2)

我发现我的代码出了什么问题:高级自定义字段中的get_field()函数在第一次发布后没有返回作者字段值,因此if(isset($author))条件返回假的。

我已将$author = get_field('author_email', $post_id);更改为 $author = get_post_meta($post_id, 'author_email', true);现在可行了