mirror of
https://github.com/WordPress/WordPress.git
synced 2025-01-03 06:57:35 +01:00
Posts, Post Types: Switch to restoring posts to draft
status by default when they are untrashed.
This allows for edits to be made to a restored post before it goes live again. This also prevents scheduled posts being published unexpectedly if they are untrashed after their originally scheduled date. The old behaviour of restoring untrashed posts to their original status can be reinstated using the `wp_untrash_post_set_previous_status()` helper function. Also fixes an issue where the incorrect post ID gets passed to hooks if no post ID is passed to the function. Props harrym, bananastalktome, jaredcobb, chriscct7, melchoyce, johnbillion, pankajmohale Fixes #23022 Built from https://develop.svn.wordpress.org/trunk@49125 git-svn-id: http://core.svn.wordpress.org/trunk@48887 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
9bfc867e66
commit
bd1fa2d998
@ -134,6 +134,11 @@ if ( $doaction ) {
|
||||
break;
|
||||
case 'untrash':
|
||||
$untrashed = 0;
|
||||
|
||||
if ( isset( $_GET['doaction'] ) && ( 'undo' === $_GET['doaction'] ) ) {
|
||||
add_filter( 'wp_untrash_post_status', 'wp_untrash_post_set_previous_status', 10, 3 );
|
||||
}
|
||||
|
||||
foreach ( (array) $post_ids as $post_id ) {
|
||||
if ( ! current_user_can( 'delete_post', $post_id ) ) {
|
||||
wp_die( __( 'Sorry, you are not allowed to restore this item from the Trash.' ) );
|
||||
@ -146,6 +151,9 @@ if ( $doaction ) {
|
||||
$untrashed++;
|
||||
}
|
||||
$sendback = add_query_arg( 'untrashed', $untrashed, $sendback );
|
||||
|
||||
remove_filter( 'wp_untrash_post_status', 'wp_untrash_post_set_previous_status', 10, 3 );
|
||||
|
||||
break;
|
||||
case 'delete':
|
||||
$deleted = 0;
|
||||
@ -419,6 +427,18 @@ foreach ( $bulk_counts as $message => $count ) {
|
||||
$ids = preg_replace( '/[^0-9,]/', '', $_REQUEST['ids'] );
|
||||
$messages[] = '<a href="' . esc_url( wp_nonce_url( "edit.php?post_type=$post_type&doaction=undo&action=untrash&ids=$ids", 'bulk-posts' ) ) . '">' . __( 'Undo' ) . '</a>';
|
||||
}
|
||||
|
||||
if ( 'untrashed' === $message && isset( $_REQUEST['ids'] ) ) {
|
||||
$ids = explode( ',', $_REQUEST['ids'] );
|
||||
|
||||
if ( 1 === count( $ids ) && current_user_can( 'edit_post', $ids[0] ) ) {
|
||||
$messages[] = sprintf(
|
||||
'<a href="%1$s">%2$s</a>',
|
||||
esc_url( get_edit_post_link( $ids[0] ) ),
|
||||
esc_html( get_post_type_object( get_post_type( $ids[0] ) )->labels->edit_item )
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( $messages ) {
|
||||
|
@ -291,7 +291,14 @@ switch ( $action ) {
|
||||
wp_die( __( 'Error in restoring the item from Trash.' ) );
|
||||
}
|
||||
|
||||
wp_redirect( add_query_arg( 'untrashed', 1, $sendback ) );
|
||||
$sendback = add_query_arg(
|
||||
array(
|
||||
'untrashed' => 1,
|
||||
'ids' => $post_id,
|
||||
),
|
||||
$sendback
|
||||
);
|
||||
wp_redirect( $sendback );
|
||||
exit;
|
||||
|
||||
case 'delete':
|
||||
|
@ -1193,6 +1193,7 @@ function wp_removable_query_args() {
|
||||
'error',
|
||||
'hotkeys_highlight_first',
|
||||
'hotkeys_highlight_last',
|
||||
'ids',
|
||||
'locked',
|
||||
'message',
|
||||
'same',
|
||||
|
@ -3233,11 +3233,13 @@ function wp_trash_post( $post_id = 0 ) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore a post or page from the Trash.
|
||||
* Restores a post from the Trash.
|
||||
*
|
||||
* @since 2.9.0
|
||||
* @since 5.6.0 An untrashed post is now returned to 'draft' status by default, except for
|
||||
* attachments which are returned to their original 'inherit' status.
|
||||
*
|
||||
* @param int $post_id Optional. Post ID. Default is ID of the global $post.
|
||||
* @param int $post_id Optional. Post ID. Default is ID of the global `$post`.
|
||||
* @return WP_Post|false|null Post data on success, false or null on failure.
|
||||
*/
|
||||
function wp_untrash_post( $post_id = 0 ) {
|
||||
@ -3247,19 +3249,25 @@ function wp_untrash_post( $post_id = 0 ) {
|
||||
return $post;
|
||||
}
|
||||
|
||||
$post_id = $post->ID;
|
||||
|
||||
if ( 'trash' !== $post->post_status ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$previous_status = get_post_meta( $post_id, '_wp_trash_meta_status', true );
|
||||
|
||||
/**
|
||||
* Filters whether a post untrashing should take place.
|
||||
*
|
||||
* @since 4.9.0
|
||||
* @since 5.6.0 The `$previous_status` parameter was added.
|
||||
*
|
||||
* @param bool|null $untrash Whether to go forward with untrashing.
|
||||
* @param WP_Post $post Post object.
|
||||
* @param bool|null $untrash Whether to go forward with untrashing.
|
||||
* @param WP_Post $post Post object.
|
||||
* @param string $previous_status The status of the post at the point where it was trashed.
|
||||
*/
|
||||
$check = apply_filters( 'pre_untrash_post', null, $post );
|
||||
$check = apply_filters( 'pre_untrash_post', null, $post, $previous_status );
|
||||
if ( null !== $check ) {
|
||||
return $check;
|
||||
}
|
||||
@ -3268,12 +3276,31 @@ function wp_untrash_post( $post_id = 0 ) {
|
||||
* Fires before a post is restored from the Trash.
|
||||
*
|
||||
* @since 2.9.0
|
||||
* @since 5.6.0 The `$previous_status` parameter was added.
|
||||
*
|
||||
* @param int $post_id Post ID.
|
||||
* @param int $post_id Post ID.
|
||||
* @param string $previous_status The status of the post at the point where it was trashed.
|
||||
*/
|
||||
do_action( 'untrash_post', $post_id );
|
||||
do_action( 'untrash_post', $post_id, $previous_status );
|
||||
|
||||
$post_status = get_post_meta( $post_id, '_wp_trash_meta_status', true );
|
||||
$new_status = ( 'attachment' === $post->post_type ) ? 'inherit' : 'draft';
|
||||
|
||||
/**
|
||||
* Filters the status that a post gets assigned when it is restored from the trash (untrashed).
|
||||
*
|
||||
* By default posts that are restored will be assigned a status of 'draft'. Return the value of `$previous_status`
|
||||
* in order to assign the status that the post had before it was trashed. The `wp_untrash_post_set_previous_status()`
|
||||
* function is available for this.
|
||||
*
|
||||
* Prior to WordPress 5.6.0, restored posts were always assigned their original status.
|
||||
*
|
||||
* @since 5.6.0
|
||||
*
|
||||
* @param string $new_status The new status of the post being restored.
|
||||
* @param int $post_id The ID of the post being restored.
|
||||
* @param string $previous_status The status of the post at the point where it was trashed.
|
||||
*/
|
||||
$post_status = apply_filters( 'wp_untrash_post_status', $new_status, $post_id, $previous_status );
|
||||
|
||||
delete_post_meta( $post_id, '_wp_trash_meta_status' );
|
||||
delete_post_meta( $post_id, '_wp_trash_meta_time' );
|
||||
@ -3295,10 +3322,12 @@ function wp_untrash_post( $post_id = 0 ) {
|
||||
* Fires after a post is restored from the Trash.
|
||||
*
|
||||
* @since 2.9.0
|
||||
* @since 5.6.0 The `$previous_status` parameter was added.
|
||||
*
|
||||
* @param int $post_id Post ID.
|
||||
* @param int $post_id Post ID.
|
||||
* @param string $previous_status The status of the post at the point where it was trashed.
|
||||
*/
|
||||
do_action( 'untrashed_post', $post_id );
|
||||
do_action( 'untrashed_post', $post_id, $previous_status );
|
||||
|
||||
return $post;
|
||||
}
|
||||
@ -7513,3 +7542,19 @@ function wp_get_original_image_url( $attachment_id ) {
|
||||
*/
|
||||
return apply_filters( 'wp_get_original_image_url', $original_image_url, $attachment_id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter callback which sets the status of an untrashed post to its previous status.
|
||||
*
|
||||
* This can be used as a callback on the `wp_untrash_post_status` filter.
|
||||
*
|
||||
* @since 5.6.0
|
||||
*
|
||||
* @param string $new_status The new status of the post being restored.
|
||||
* @param int $post_id The ID of the post being restored.
|
||||
* @param string $previous_status The status of the post at the point where it was trashed.
|
||||
* @return string The new status of the post.
|
||||
*/
|
||||
function wp_untrash_post_set_previous_status( $new_status, $post_id, $previous_status ) {
|
||||
return $previous_status;
|
||||
}
|
||||
|
@ -13,7 +13,7 @@
|
||||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '5.6-alpha-49124';
|
||||
$wp_version = '5.6-alpha-49125';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
Loading…
Reference in New Issue
Block a user