在wordpress上发布帖子后发送邮件

时间:2013-12-04 19:35:16

标签: php wordpress email

在我的网站上发布帖子后,我正在编写一个发送邮件的功能,但问题如下:

如果我编辑已发布的帖子,每次更新已发布的帖子时都会发送新邮件。

这是我写的函数:

function send_mails($post_ID)  {
     global $wpdb;
     $post = get_post($post_ID);
     if ( !wp_is_post_revision( $post_ID ) ) {
         $contenido = $post->post_content;
         $excerpt = substr($contenido,0,255);
         $permalink = get_permalink($post_ID);
         $authorURL = get_author_posts_url($post->post_author);
         $title = $post->post_title;
                 $result = $wpdb->get_results("SELECT * FROM wp_subscribe", ARRAY_A);
         $origen = "XXXX";
         $headers = "From: $origen\r\n";
         $headers .= "X-Mailer: PHP5\n";
         $headers .= 'MIME-Version: 1.0' . "\n";
         $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
         foreach($result as $row){
               // A lot of code for styling the mail-..
         mail($row['email'],$title,$contenido,$headers);
         }
     }
     return $post_ID;
}
add_action( 'publish_post', 'send_mails' );

有什么不对?或者也许我错过了一些功能来检查它是否是一个经过编辑的帖子?

提前谢谢

3 个答案:

答案 0 :(得分:2)

您可以在发送电子邮件时为帖子添加元值:

add_post_meta($post_id, 'email_sent', 'yes', true)

然后在发送电子邮件功能中检查这一点,这样它只会发送一次。

if( get_post_meta($post_id, 'email_sent', 'true') != 'yes' ) {
    //    send the email
   }

答案 1 :(得分:0)

save_post是在创建或更新帖子或页面时触发的操作,可以是导入,帖子/页面编辑表单,xmlrpc或邮件发送。帖子的数据存储在$ _POST,$ _GET或全局$ post_data中,具体取决于帖子的编辑方式。例如,快速编辑使用$ _POST。

add_action('save_post','function');

http://codex.wordpress.org/Plugin_API/Action_Reference/save_post

答案 2 :(得分:0)

更新新人的答案。

使用save_post,来自WordPress 3.3的第三个参数"更新"。所以例子是:

function save_func($ID, $post,$update) {

   if($update == false) {
     // do something if its first time publish
   } else {
     // Do something if its update
   }
}

add_action( 'save_post', 'save_func', 10, 3 );

多数民众赞成。