Отправить почту после публикации в wordpress

Я пишу функцию отправки писем после публикации публикации на своем сайте, но проблема заключается в следующем:

Если я редактирую сообщение, которое уже опубликовано, каждый раз я отправляю новую почту, обновляю опубликованную запись.

Это функция, которую я написал:

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 ответа

Вы можете добавить мета-значение в сообщение при отправке письма:

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

Затем проверьте это в функции отправки электронной почты, чтобы он отправил только один раз.

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


save_post - это действие, инициируемое при создании или обновлении почты или страницы, которая может быть получена из формы импорта, публикации/редактирования страницы, xmlrpc или сообщения по электронной почте. Данные для сообщения хранятся в $ _POST, $ _GET или глобальных $ post_data, в зависимости от того, как было отредактировано сообщение. Например, быстрые изменения используют $ _POST.

add_action ('save_post', 'function');

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


Чтобы обновить ответ для новых ребят.

Используйте save_post, который из WordPress 3.3 имеет третий параметр "update". Таким образом, пример:

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 );

Это оно.

licensed under cc by-sa 3.0 with attribution.