save_post WordPress Action Hook
The save_post hook is a powerful tool that allows you to perform custom actions when a post is saved. This hook is called whenever a post is created or updated, giving you the ability to perform any custom actions you need. This hook is especially useful for performing custom validation on a post, or for automatically generating custom post content.
do_action( 'save_post', int $post_ID , WP_Post $post , bool $update ) #
Fires once a post has been saved.
Parameters
- $post_ID
(int)Post ID.
- $post
(WP_Post)Post object.
- $update
(bool)Whether this is an existing post being updated.
More Information
save_post
is an action triggered whenever a post or page is created or updated, which could be from an import, post/page edit form, xmlrpc, or post by email. The data for the post is stored in $_POST
, $_GET
or the global $post_data
, depending on how the post was edited. For example, quick edits use $_POST
.
Since this action is triggered right after the post has been saved, you can easily access this post object by using get_post($post_id);
.
NOTE: As of WP 3.7, an alternative action has been introduced, which is called for specific post types: save_post_{post_type}
. Hooking to this action prevents your callback to be unnecessarily triggered.
Avoiding infinite loops
If you are calling a function such as wp_update_post
that includes the save_post
hook, your hooked function will create an infinite loop. To avoid this, unhook your function before calling the function you need, then re-hook it afterward.
// this function makes all posts in the default category private function set_private_categories($post_id) { // If this is a revision, get real post ID if ( $parent_id = wp_is_post_revision( $post_id ) ) $post_id = $parent_id; // Get default category ID from options $defaultcat = get_option( 'default_category' ); // Check if this post is in default category if ( in_category( $defaultcat, $post_id ) ) { // unhook this function so it doesn't loop infinitely remove_action( 'save_post', 'set_private_categories' ); // update the post, which calls save_post again wp_update_post( array( 'ID' => $post_id, 'post_status' => 'private' ) ); // re-hook this function add_action( 'save_post', 'set_private_categories' ); } } add_action( 'save_post', 'set_private_categories' );
Source
File: wp-includes/post.php
Changelog
Version | Description |
---|---|
1.5.0 | Introduced. |