We have taken on the task to do heavy refactoring on a client’s website that is used to handle volunteers, applicants, and relationships between them. This is incredibly challenging, but fun nonetheless.
Today I was in the process of writing an action that would do something when a new relationship was created. The relationship is a custom post type of ‘mentorship’.
After visiting the codex, it became clear that save_post_{$post->post_type} was the action to hook onto.
When defining 3 parameters for the callback function, you get the following:
function call_back_function( $post_id, $post, $update )
That last parameter, $update, is as unreliable as it can get, so please never use it.
After setting the hook I noticed that the action was called immediately when the post was created, in draft mode. This was not what I wanted, I wanted the action to fire off after the user modified things and clicked on the Publish button.
Eventually the following code did the trick – it will only fire when the user clicks the Publish button:
if ( 'auto-draft' === $post->post_status ||
wp_is_post_revision( $post_id ) ||
wp_is_post_autosave( $post_id ) ) {
return;
One would thing that just using wp_is_post_revision and wp_is_post_autosave would suffice, but in my case I had to explicitly check for auto-draft in order to avoid calling the code that has to run when the user publishes the new post.