在我的网站上发布帖子后,我正在编写一个发送邮件的功能,但问题如下:
如果我编辑已发布的帖子,每次更新已发布的帖子时都会发送新邮件。
这是我写的函数:
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' );
有什么不对?或者也许我错过了一些功能来检查它是否是一个经过编辑的帖子?
提前谢谢
答案 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 );
多数民众赞成。