Title: _wp_put_post_revision
Published: April 25, 2014
Last modified: April 28, 2025

---

# _wp_put_post_revision( int|WP_Post|array|null $post = null, bool $autosave = false ): int|󠀁[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)󠁿

## In this article

 * [Parameters](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#source)
 * [Hooks](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#hooks)
 * [Related](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#wp--skip-link--target)

This function’s access is marked private. This means it is not intended for use 
by plugin or theme developers, only by core. It is listed here for completeness.

Inserts post data into the posts table as a post revision.

## 󠀁[Parameters](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#parameters)󠁿

 `$post`int|[WP_Post](https://developer.wordpress.org/reference/classes/wp_post/)
|array|nulloptional

Post ID, post object OR post array.

Default:`null`

`$autosave`booloptional

Whether the revision is an autosave or not.

Default:`false`

## 󠀁[Return](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#return)󠁿

 int|[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/) [WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)
or 0 if error, new revision ID if success.

## 󠀁[Source](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#source)󠁿

    ```php
    function _wp_put_post_revision( $post = null, $autosave = false ) {
    	if ( is_object( $post ) ) {
    		$post = get_object_vars( $post );
    	} elseif ( ! is_array( $post ) ) {
    		$post = get_post( $post, ARRAY_A );
    	}

    	if ( ! $post || empty( $post['ID'] ) ) {
    		return new WP_Error( 'invalid_post', __( 'Invalid post ID.' ) );
    	}

    	if ( isset( $post['post_type'] ) && 'revision' === $post['post_type'] ) {
    		return new WP_Error( 'post_type', __( 'Cannot create a revision of a revision' ) );
    	}

    	$post = _wp_post_revision_data( $post, $autosave );
    	$post = wp_slash( $post ); // Since data is from DB.

    	$revision_id = wp_insert_post( $post, true );
    	if ( is_wp_error( $revision_id ) ) {
    		return $revision_id;
    	}

    	if ( $revision_id ) {
    		/**
    		 * Fires once a revision has been saved.
    		 *
    		 * @since 2.6.0
    		 * @since 6.4.0 The post_id parameter was added.
    		 *
    		 * @param int $revision_id Post revision ID.
    		 * @param int $post_id     Post ID.
    		 */
    		do_action( '_wp_put_post_revision', $revision_id, $post['post_parent'] );
    	}

    	return $revision_id;
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/revision.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/revision.php#L354)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/revision.php#L354-L391)

## 󠀁[Hooks](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#hooks)󠁿

 [do_action( ‘_wp_put_post_revision’, int $revision_id, int $post_id )](https://developer.wordpress.org/reference/hooks/_wp_put_post_revision/)

Fires once a revision has been saved.

## 󠀁[Related](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#related)󠁿

| Uses | Description | 
| [_wp_post_revision_data()](https://developer.wordpress.org/reference/functions/_wp_post_revision_data/)`wp-includes/revision.php` |

Returns a post array ready to be inserted into the posts table as a post revision.

  | 
| [wp_insert_post()](https://developer.wordpress.org/reference/functions/wp_insert_post/)`wp-includes/post.php` |

Inserts or update a post.

  | 
| [__()](https://developer.wordpress.org/reference/functions/__/)`wp-includes/l10n.php` |

Retrieves the translation of $text.

  | 
| [wp_slash()](https://developer.wordpress.org/reference/functions/wp_slash/)`wp-includes/formatting.php` |

Adds slashes to a string or recursively adds slashes to strings within an array.

  | 
| [do_action()](https://developer.wordpress.org/reference/functions/do_action/)`wp-includes/plugin.php` |

Calls the callback functions that have been added to an action hook.

  | 
| [get_post()](https://developer.wordpress.org/reference/functions/get_post/)`wp-includes/post.php` |

Retrieves post data given a post ID or post object.

  | 
| [is_wp_error()](https://developer.wordpress.org/reference/functions/is_wp_error/)`wp-includes/load.php` |

Checks whether the given variable is a WordPress Error.

  | 
| [WP_Error::__construct()](https://developer.wordpress.org/reference/classes/wp_error/__construct/)`wp-includes/class-wp-error.php` |

Initializes the error.

  |

[Show 6 more](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#)

| Used by | Description | 
| [WP_REST_Autosaves_Controller::create_post_autosave()](https://developer.wordpress.org/reference/classes/wp_rest_autosaves_controller/create_post_autosave/)`wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php` |

Creates autosave for the specified post.

  | 
| [wp_create_post_autosave()](https://developer.wordpress.org/reference/functions/wp_create_post_autosave/)`wp-admin/includes/post.php` |

Creates autosave data for the specified post from `$_POST` data.

  | 
| [wp_save_post_revision()](https://developer.wordpress.org/reference/functions/wp_save_post_revision/)`wp-includes/revision.php` |

Creates a revision for the current version of a post.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/functions/_wp_put_post_revision/?output_format=md#changelog)󠁿

| Version | Description | 
| [2.6.0](https://developer.wordpress.org/reference/since/2.6.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2F_wp_put_post_revision%2F)
before being able to contribute a note or feedback.