--- a/wp/wp-admin/revision.php Tue Oct 22 16:11:46 2019 +0200
+++ b/wp/wp-admin/revision.php Tue Dec 15 13:49:49 2020 +0100
@@ -10,7 +10,7 @@
*/
/** WordPress Administration Bootstrap */
-require_once( dirname( __FILE__ ) . '/admin.php' );
+require_once __DIR__ . '/admin.php';
require ABSPATH . 'wp-admin/includes/revision.php';
@@ -33,7 +33,8 @@
switch ( $action ) {
case 'restore':
- if ( ! $revision = wp_get_post_revision( $revision_id ) ) {
+ $revision = wp_get_post_revision( $revision_id );
+ if ( ! $revision ) {
break;
}
@@ -41,24 +42,36 @@
break;
}
- if ( ! $post = get_post( $revision->post_parent ) ) {
+ $post = get_post( $revision->post_parent );
+ if ( ! $post ) {
break;
}
- // Restore if revisions are enabled or this is an autosave.
+ // Don't restore if revisions are disabled and this is not an autosave.
if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) {
$redirect = 'edit.php?post_type=' . $post->post_type;
break;
}
- // Don't allow revision restore when post is locked
+ // Don't restore if the post is locked.
if ( wp_check_post_lock( $post->ID ) ) {
break;
}
check_admin_referer( "restore-post_{$revision->ID}" );
+ /*
+ * Ensure the global $post remains the same after revision is restored.
+ * Because wp_insert_post() and wp_transition_post_status() are called
+ * during the process, plugins can unexpectedly modify $post.
+ */
+ $backup_global_post = clone $post;
+
wp_restore_post_revision( $revision->ID );
+
+ // Restore the global $post as it was before.
+ $post = $backup_global_post;
+
$redirect = add_query_arg(
array(
'message' => 5,
@@ -70,10 +83,13 @@
case 'view':
case 'edit':
default:
- if ( ! $revision = wp_get_post_revision( $revision_id ) ) {
+ $revision = wp_get_post_revision( $revision_id );
+ if ( ! $revision ) {
break;
}
- if ( ! $post = get_post( $revision->post_parent ) ) {
+
+ $post = get_post( $revision->post_parent );
+ if ( ! $post ) {
break;
}
@@ -81,7 +97,7 @@
break;
}
- // Revisions disabled and we're not looking at an autosave
+ // Bail if revisions are disabled and this is not an autosave.
if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) {
$redirect = 'edit.php?post_type=' . $post->post_type;
break;
@@ -89,7 +105,7 @@
$post_edit_link = get_edit_post_link();
$post_title = '<a href="' . $post_edit_link . '">' . _draft_or_post_title() . '</a>';
- /* translators: %s: post title */
+ /* translators: %s: Post title. */
$h1 = sprintf( __( 'Compare Revisions of “%s”' ), $post_title );
$return_to_post = '<a href="' . $post_edit_link . '">' . __( '← Return to editor' ) . '</a>';
$title = __( 'Revisions' );
@@ -110,10 +126,11 @@
// This is so that the correct "Edit" menu item is selected.
if ( ! empty( $post->post_type ) && 'post' != $post->post_type ) {
- $parent_file = $submenu_file = 'edit.php?post_type=' . $post->post_type;
+ $parent_file = 'edit.php?post_type=' . $post->post_type;
} else {
- $parent_file = $submenu_file = 'edit.php';
+ $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 ) );
@@ -136,12 +153,12 @@
);
$revisions_sidebar = '<p><strong>' . __( 'For more information:' ) . '</strong></p>';
-$revisions_sidebar .= '<p>' . __( '<a href="https://codex.wordpress.org/Revision_Management">Revisions Management</a>' ) . '</p>';
+$revisions_sidebar .= '<p>' . __( '<a href="https://wordpress.org/support/article/revisions/">Revisions Management</a>' ) . '</p>';
$revisions_sidebar .= '<p>' . __( '<a href="https://wordpress.org/support/">Support</a>' ) . '</p>';
get_current_screen()->set_help_sidebar( $revisions_sidebar );
-require_once( ABSPATH . 'wp-admin/admin-header.php' );
+require_once ABSPATH . 'wp-admin/admin-header.php';
?>
@@ -152,4 +169,4 @@
<?php
wp_print_revision_templates();
-require_once( ABSPATH . 'wp-admin/admin-footer.php' );
+require_once ABSPATH . 'wp-admin/admin-footer.php';