Support » Developing with WordPress » Admin notification being sent 3 times

  • Resolved El Pablo

    (@el-pablo)


    I have created a custom post type for projects and the goal is that users can enter a project on the backend wp admin area. When this happens, an email should be sent to the admin, so he can check the post and then publish it. To accomplish this, I have added an action hook on ‘wp_insert_post’. My issue is that the admin notification email is being sent 3 times, instead of 1 time. So I’m wondering, what is wrong with my code?

    
    function wgoe_send_admin_notification( $post_id, $post, $update ) {
    
        // If the post type is not a project, don't send the email
        if (get_post_type($post_id) != 'project')
        return;
    
        // If this is a revision, don't send the email.
        if ( wp_is_post_revision( $post_id ) )
        return;
    
       // If post is being published, don't send the email
       if (get_post_status( $post_id ) == 'publish' )
       return;
     
        $post_url = get_edit_post_link( $post_id );
        $subject = 'A project has been added or updated';
     
        $message = "Howdy Admin! \n\n\n";
        $message .= "A user has added or updated a project on your website. Please check the project for publication:\n\n";
        $message .= $post->post_title . ": " . $post_url . "\n\n\n";
        $message .= "Dive Business For Sale";
     
        // Send email to admin.
        $adminemail = get_option( 'admin_email' );
        wp_mail( $adminemail, $subject, $message );
    }
    
    add_action( 'wp_insert_post', 'wgoe_send_admin_notification', 10, 3 );

    The page I need help with: [log in to see the link]

Viewing 4 replies - 1 through 4 (of 4 total)
  • Moderator bcworkz

    (@bcworkz)

    It’s a little known fact that many action hooks fire more than once per request. It’s often of little consequence to do the same thing several times. There are exceptions like yours. The solution is to have your code remove itself from the call stack after it executes once.
    https://developer.wordpress.org/reference/functions/remove_action/

    Thread Starter El Pablo

    (@el-pablo)

    Hi @bcworkz , thanks for clarifying. I’m familiar with the remove_action function, but how can I know when I have to remove my added function again? I mean, what code snippet do you suggest so my issue will be solved?

    Moderator bcworkz

    (@bcworkz)

    Just remove your callback from within the callback itself as its final operation. It’ll execute once, then remove itself. It’ll not be called again until there’s a new request that fires the action all over again.

    After the wp_mail() call add
    remove_action( 'wp_insert_post', 'wgoe_send_admin_notification', 10 );

    Thread Starter El Pablo

    (@el-pablo)

    Hi @bcworkz , thanks, this works fine now!

Viewing 4 replies - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.