12

I want to send an email any time a new post is FIRST published (not when it is edited)

I tried:

add_action('publish_post', 'postPublished');

But postPublished is ALSO called when I update an already published post. I just want to get it called ONLY at first time a post is published.

Regards

yarek
  • 11,278
  • 30
  • 120
  • 219

3 Answers3

17

I think the hook you're looking for is draft_to_publish

If you are wanting to only send an email on a new post I would consider targeting when the post is published. You could even look at the transition_post_status hook and just conditionalize if the post has been edited, something like this could work:

function so_post_40744782( $new_status, $old_status, $post ) {
    if ( $new_status == 'publish' && $old_status != 'publish' ) {
        $author = "foobar";
        $message = "We wanted to notify you a new post has been published.";
        wp_mail($author, "New Post Published", $message);
    }
}
add_action('transition_post_status', 'so_post_40744782', 10, 3 );
vard
  • 4,057
  • 2
  • 26
  • 46
DᴀʀᴛʜVᴀᴅᴇʀ
  • 7,681
  • 17
  • 73
  • 127
5

You should read Post Status Transitions from the WordPress Codex in order to fully understand the problem.

A possible solution which covers most cases for instance is:

add_action('draft_to_publish', 'postPublished');
add_action('future_to_publish', 'postPublished');
add_action('private_to_publish', 'postPublished');
DᴀʀᴛʜVᴀᴅᴇʀ
  • 7,681
  • 17
  • 73
  • 127
Blackbam
  • 17,496
  • 26
  • 97
  • 150
0
function your_callback( $post_id, $post  ) {

        if (strpos($_SERVER['HTTP_REFERER'], '&action=edit') !== false) {

            //edit previous post
        }
        else{
            //just add a new post
        }
    }
    add_action( 'publish_{your_post_type}', 'your_callback', 10, 3 );
SMHussain
  • 31
  • 2
  • 8