What action can I use in WordPress that triggers whenever a custom post is saved or updated? What action can I use in WordPress that triggers whenever a custom post is saved or updated? wordpress wordpress

What action can I use in WordPress that triggers whenever a custom post is saved or updated?


WordPress 3.7 introduced a new way of handling this with the save_post_{$post_type} hook.

Let's say your custom post type is "member-directory". You can now run save_post on that post type only by using something like this:

function my_custom_save_post( $post_id ) {    // do stuff here}add_action( 'save_post_member-directory', 'my_custom_save_post' );


Updated since 3.7.0 - props @Baptiste for the reminder

3.7.0 introduced the "save_post_{$post->post_type}" hook, which will be triggered by the post type. This allows you to add an action specific to your custom post type (or "page" or "post" etc). This saves you one line of the below.

The accepted method is to add an action on save_post_{post-type} (substituting your post type's slug for {post-type} in the example above). There are a number of checks you can / probably should still do within your action's callback, which I document in the example below:

from the Codex:

/* Register a hook to fire only when the "my-cpt-slug" post type is saved */add_action( 'save_post_my-cpt-slug', 'myplugin_save_postdata', 10, 3 );/* When a specific post type's post is saved, saves our custom data * @param int     $post_ID Post ID. * @param WP_Post $post    Post object. * @param bool    $update  Whether this is an existing post being updated or not.*/function myplugin_save_postdata( $post_id, $post, $update ) {  // verify if this is an auto save routine.   // If it is our form has not been submitted, so we dont want to do anything  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )       return;  // verify this came from the our screen and with proper authorization,  // because save_post can be triggered at other times  if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) )      return;  // Check permissions  if ( 'page' == $post->post_type )   {    if ( !current_user_can( 'edit_page', $post_id ) )        return;  }  else  {    if ( !current_user_can( 'edit_post', $post_id ) )        return;  }  // OK, we're authenticated: we need to find and save the data  $mydata = $_POST['myplugin_new_field'];  // Do something with $mydata   // probably using add_post_meta(), update_post_meta(), or   // a custom table (see Further Reading section below)   return $mydata;}

If you are registering multiple custom post types and you would like to consolidate your save_post functionality into a single function, then hook on the generic save_post action. But then remember to do your post type check within your function if there is any differences in how those post types save their data.

eg: if ( 'my-cpt-1' == $post->post_type ){ // handle my-cpt-1 specific stuff here ...