A WordPress-centric search engine for devs and theme authors



wp_restore_post_revision ›

Since2.6.0
Deprecatedn/a
wp_restore_post_revision ( $revision_id, $fields = null )
Parameters: (2)
  • (int|object) $revision_id Revision ID or revision object.
    Required: Yes
  • (array) $fields Optional. What fields to restore from. Defaults to all.
    Required: No
    Default: null
Returns:
  • (mixed) Null if error, false if no fields to restore, (int) post ID if success.
Defined at:
Codex:

Restores a post to the specified revision.

Can restore a past revision using all fields of the post revision, or only selected fields.



Source

function wp_restore_post_revision( $revision_id, $fields = null ) {
	if ( !$revision = wp_get_post_revision( $revision_id, ARRAY_A ) )
		return $revision;

	if ( !is_array( $fields ) )
		$fields = array_keys( _wp_post_revision_fields() );

	$update = array();
	foreach( array_intersect( array_keys( $revision ), $fields ) as $field ) {
		$update[$field] = $revision[$field];
	}

	if ( !$update )
		return false;

	$update['ID'] = $revision['post_parent'];

	$update = wp_slash( $update ); //since data is from db

	$post_id = wp_update_post( $update );
	if ( ! $post_id || is_wp_error( $post_id ) )
		return $post_id;

	// Add restore from details
	$restore_details = array(
		'restored_revision_id' => $revision_id,
		'restored_by_user'     => get_current_user_id(),
		'restored_time'        => time()
	);
	update_post_meta( $post_id, '_post_restored_from', $restore_details );

	// Update last edit user
	update_post_meta( $post_id, '_edit_last', get_current_user_id() );

	/**
	 * Fires after a post revision has been restored.
	 *
	 * @since 2.6.0
	 *
	 * @param int $post_id     Post ID.
	 * @param int $revision_id Post revision ID.
	 */
	do_action( 'wp_restore_post_revision', $post_id, $revision['ID'] );

	return $post_id;
}