Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion src/wp-admin/edit-form-advanced.php
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,20 @@
$nonce_action = 'update-post_' . $post->ID;
$form_extra .= "<input type='hidden' id='post_ID' name='post_ID' value='" . esc_attr( $post->ID ) . "' />";

// If an autosave was restored from the revision screen, load it into the editor.
$restored_autosave = false;
if ( ! empty( $_GET['restored_autosave'] ) ) {
$restored_autosave_id = absint( $_GET['restored_autosave'] );
$restored_autosave = wp_get_post_revision( $restored_autosave_id );
if ( $restored_autosave && $restored_autosave->post_parent === $post->ID && wp_is_post_autosave( $restored_autosave ) ) {
$post->post_title = $restored_autosave->post_title;
$post->post_content = $restored_autosave->post_content;
$post->post_excerpt = $restored_autosave->post_excerpt;

$notice = __( 'The autosave has been loaded into the editor. Review your changes and click Update to publish them.' );
}
}

// Detect if there exists an autosave newer than the post and if that autosave is different than the post.
if ( $autosave && mysql2date( 'U', $autosave->post_modified_gmt, false ) > mysql2date( 'U', $post->post_modified_gmt, false ) ) {
foreach ( _wp_post_revision_fields( $post ) as $autosave_field => $_autosave_field ) {
Expand All @@ -251,7 +265,10 @@
}
// If this autosave isn't different from the current post, begone.
if ( ! $notice ) {
wp_delete_post_revision( $autosave->ID );
// Don't delete the autosave if it's the one we just restored.
if ( ! $restored_autosave || $restored_autosave->ID !== $autosave->ID ) {
wp_delete_post_revision( $autosave->ID );
}
}
unset( $autosave_field, $_autosave_field );
}
Expand Down
17 changes: 17 additions & 0 deletions src/wp-admin/edit-form-blocks.php
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,19 @@ static function ( $classes ) {
}
}

// If an autosave was restored from the revision screen, load it as initial edits.
$restored_autosave_id = ! empty( $_GET['restored_autosave'] ) ? absint( $_GET['restored_autosave'] ) : 0;
if ( $restored_autosave_id ) {
$restored_autosave = wp_get_post_revision( $restored_autosave_id );
if ( $restored_autosave && $restored_autosave->post_parent === $post->ID && wp_is_post_autosave( $restored_autosave ) ) {
$initial_edits = array(
'title' => $restored_autosave->post_title,
'content' => $restored_autosave->post_content,
'excerpt' => $restored_autosave->post_excerpt,
);
}
}

// Preload server-registered block schemas.
wp_add_inline_script(
'wp-blocks',
Expand Down Expand Up @@ -299,6 +312,10 @@ static function ( $classes ) {
}
}

if ( $restored_autosave_id && ! empty( $initial_edits ) ) {
unset( $editor_settings['autosave'] );
}

if ( ! empty( $post_type_object->template ) ) {
$editor_settings['template'] = $post_type_object->template;
$editor_settings['templateLock'] = ! empty( $post_type_object->template_lock ) ? $post_type_object->template_lock : false;
Expand Down
9 changes: 8 additions & 1 deletion src/wp-admin/includes/revision.php
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,14 @@ function wp_print_revision_templates() {
<# } #>
<?php } ?>
<# if ( data.attributes.autosave ) { #>
type="button" class="restore-revision button button-primary" value="<?php esc_attr_e( 'Restore This Autosave' ); ?>" />
type="button" class="restore-revision button button-primary" value="
<?php
$restore_autosave_label = in_array( $post->post_status, array( 'publish', 'future', 'private' ), true )
? __( 'Load This Autosave in Editor' )
: __( 'Restore This Autosave' );
echo esc_attr( $restore_autosave_label );
?>
" />
<# } else { #>
type="button" class="restore-revision button button-primary" value="<?php esc_attr_e( 'Restore This Revision' ); ?>" />
<# } #>
Expand Down
8 changes: 8 additions & 0 deletions src/wp-admin/revision.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,14 @@

check_admin_referer( "restore-post_{$revision->ID}" );

if ( wp_is_post_autosave( $revision ) && in_array( $post->post_status, array( 'publish', 'future', 'private' ), true ) ) {
$redirect = add_query_arg(
array( 'restored_autosave' => $revision->ID ),
get_edit_post_link( $post->ID, 'url' )
);
break;
}

/*
* Ensure the global $post remains the same after revision is restored.
* Because wp_insert_post() and wp_transition_post_status() are called
Expand Down
Loading