Description
When a post is saved, the post status is "transitioned" from one status to another, though this does not always mean the status has actually changed before and after the save. This function fires a number of action hooks related to that transition: the generic ‘transition_post_status’ action, as well as the dynamic hooks ‘$old_status_to_$new_status’ and ‘$new_status_$post->post_type’. Note that the function does not transition the post object in the database.
For instance: When publishing a post for the first time, the post status may transition from ‘draft’ – or some other status – to ‘publish’. However, if a post is already published and is simply being updated, the "old" and "new" statuses may both be ‘publish’ before and after the transition.
Parameters
- $new_status
-
(string) (Required) Transition to this post status.
- $old_status
-
(string) (Required) Previous post status.
- $post
-
(WP_Post) (Required) Post data.
- This function contains do_action() calls for post status transition action hooks. The order of the words in the function name might be confusing – it does not change the status of posts, it only calls actions that can be hooked into by plugin developers. Although this function is already called where needed by core functions, it may be useful when a plugin updates a post by directly interacting with the database, thereby bypassing the usual post status transition actions. For the actions to be effective, the new status, old status and post object must be passed.
- To transition the status of a post, rather than perform actions when a post status is transitioned, use wp_update_post() or wp_publish_post().
- This function is already called where needed in core functions. You do not need to call this function when changing a post’s status with wp_update_post(), for example. You do need to call this function in your plugin or theme when manually updating the status of a post.
Source
File: wp-includes/post.php
function wp_transition_post_status( $new_status, $old_status, $post ) {
do_action( 'transition_post_status', $new_status, $old_status, $post );
do_action( "{$old_status}_to_{$new_status}", $post );
do_action( "{$new_status}_{$post->post_type}", $post->ID, $post );
}
Changelog
Version | Description |
2.3.0 | Introduced. |