diff --git a/wp-admin/revision.php b/wp-admin/revision.php
index b1590ee6d7..d7410b2ac3 100644
--- a/wp-admin/revision.php
+++ b/wp-admin/revision.php
@@ -42,22 +42,33 @@ switch ( $action ) {
 			break;
 		}
 
-		$post = get_post( $revision->post_parent );
-		if ( ! $post ) {
+		$parent = get_post( $revision->post_parent );
+		if ( ! $parent ) {
 			break;
 		}
 
-		// Restore if revisions are enabled or this is an autosave.
-		if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) {
-			$redirect = 'edit.php?post_type=' . $post->post_type;
+		// Don't restore if revisions are disabled and this is not an autosave.
+		if ( ! wp_revisions_enabled( $parent ) && ! wp_is_post_autosave( $revision ) ) {
+			$redirect = 'edit.php?post_type=' . $parent->post_type;
 			break;
 		}
 
 		// Don't allow revision restore when post is locked.
-		if ( wp_check_post_lock( $post->ID ) ) {
+		if ( wp_check_post_lock( $parent->ID ) ) {
 			break;
 		}
 
+		/**
+		 * @global WP_Query $wp_query
+		 */
+		global $wp_query;
+
+		// Set up global post variables for the use of any functions hooked into restore process.
+		$post = clone $parent;
+		$wp_query->posts = array( $post );
+		$wp_query->post = $post;
+		setup_postdata( $post );
+
 		check_admin_referer( "restore-post_{$revision->ID}" );
 
 		wp_restore_post_revision( $revision->ID );
@@ -66,7 +77,7 @@ switch ( $action ) {
 				'message'  => 5,
 				'revision' => $revision->ID,
 			),
-			get_edit_post_link( $post->ID, 'url' )
+			get_edit_post_link( $parent->ID, 'url' )
 		);
 		break;
 	case 'view':
@@ -77,8 +88,8 @@ switch ( $action ) {
 			break;
 		}
 
-		$post = get_post( $revision->post_parent );
-		if ( ! $post ) {
+		$parent = get_post( $revision->post_parent );
+		if ( ! $parent ) {
 			break;
 		}
 
@@ -87,8 +98,8 @@ switch ( $action ) {
 		}
 
 		// Revisions disabled and we're not looking at an autosave.
-		if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) {
-			$redirect = 'edit.php?post_type=' . $post->post_type;
+		if ( ! wp_revisions_enabled( $parent ) && ! wp_is_post_autosave( $revision ) ) {
+			$redirect = 'edit.php?post_type=' . $parent->post_type;
 			break;
 		}
 
@@ -104,7 +115,7 @@ switch ( $action ) {
 }
 
 // Empty post_type means either malformed object found, or no valid parent was found.
-if ( ! $redirect && empty( $post->post_type ) ) {
+if ( ! $redirect && empty( $parent->post_type ) ) {
 	$redirect = 'edit.php';
 }
 
@@ -114,15 +125,15 @@ if ( ! empty( $redirect ) ) {
 }
 
 // This is so that the correct "Edit" menu item is selected.
-if ( ! empty( $post->post_type ) && 'post' != $post->post_type ) {
-	$parent_file = 'edit.php?post_type=' . $post->post_type;
+if ( ! empty( $parent->post_type ) && 'post' != $parent->post_type ) {
+	$parent_file = 'edit.php?post_type=' . $parent->post_type;
 } else {
 	$parent_file = 'edit.php';
 }
 $submenu_file = $parent_file;
 
 wp_enqueue_script( 'revisions' );
-wp_localize_script( 'revisions', '_wpRevisionsSettings', wp_prepare_revisions_for_js( $post, $revision_id, $from ) );
+wp_localize_script( 'revisions', '_wpRevisionsSettings', wp_prepare_revisions_for_js( $parent, $revision_id, $from ) );
 
 /* Revisions Help Tab */
 
