How can I run custom function when post status is changed?

I can hook custom function to each of trash_post, edit_post, private_to_publish etc. to meet some of my requirements, but I need also to check for more possible transitions like ‘pending to draft’, ‘private to draft’ and so on.

Something similar to this inexistent function:

if( post_status_changed($post_id) ) {
    my_custom_function();
}

1
1

See this Codex page. In general the hook is {old_status}_to_{new_status}. (Untested) but in your case, the hook would be pending_to_draft:

 add_action('pending_to_draft','wpse45803_pending_to_draft');
 function wpse45803_pending_to_draft($post){
  //Do something
 }

You might want to look up the wp_transition_post_status function. You could also use the hook: transition_post_status

 add_action('transition_post_status','wpse45803_transition_post_status',10,3);
 function wpse45803_transition_post_status($new_status,$old_status,$post){
  //Do something
 }

Leave a Comment