2015-09-22 91 views
0

我想在Wordpress中創建一個推薦形式和列表頁面,並且在發送電子郵件給推薦作者時遇到問題,通知他他的帖子已發佈。發送通知郵件第一次在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_statuspending_to_publishpost_updated沒有任何爲我工作。

有什麼建議嗎?

在此先感謝

+0

使用保存後鉤檢查function.You內後的狀態可以設置後元,以防止進一步的電子郵件。 – David

+0

你能舉個例子嗎?我將如何去檢查是否正在創建帖子,以便鉤子不會觸發? –

+0

首先嚐試一下,你可以使用'get_post'來拉動帖子,然後使用'update_post_meta()'保存自定義數據。 – David

回答

2

我發現了什麼是錯我的代碼:從先進的自定義字段的get_field()功能沒有返回作者字段值上的第一篇文章發表,因此if(isset($author))條件是返回false。

我已經改變了$author = get_field('author_email', $post_id);$author = get_post_meta($post_id, 'author_email', true);和現在的作品

+0

你的意思是「author_email」而不是「email_pacient」,對吧? – rjpedrosa

+0

你是對的,當我複製粘貼代碼時可能忘記更改名稱。我試圖在發佈之前翻譯我的變量名稱。現在改變了。 –