我正在尝试在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
也不适合我。
有什么建议吗?
提前致谢
答案 0 :(得分:2)
我发现我的代码出了什么问题:高级自定义字段中的get_field()
函数在第一次发布后没有返回作者字段值,因此if(isset($author))
条件返回假的。
我已将$author = get_field('author_email', $post_id);
更改为
$author = get_post_meta($post_id, 'author_email', true);
现在可行了