diff --git a/includes/class-delete-all.php b/includes/class-delete-all.php index 9fda4f08e0a9523c49ba2f30ecd6d85da287729a..2472f38aa8f9767c9f0a2602e25f879fc44e2b7b 100644 --- a/includes/class-delete-all.php +++ b/includes/class-delete-all.php @@ -30,14 +30,17 @@ class Delete_All { * Handle a request to delete all trashed items for a given post type */ public static function process( $vars ) { + // Special keys are used to trigger this request, and we need to remove them on redirect + $extra_keys = array( 'delete_all', 'delete_all2', ); + $action_scheduled = self::action_next_scheduled( self::CRON_EVENT, $vars->post_type ); if ( empty( $action_scheduled ) ) { wp_schedule_single_event( time(), self::CRON_EVENT, array( $vars ) ); - self::redirect( true ); + Main::do_admin_redirect( self::ADMIN_NOTICE_KEY, true, $extra_keys ); } else { - self::redirect( false ); + Main::do_admin_redirect( self::ADMIN_NOTICE_KEY, false, $extra_keys ); } } @@ -92,25 +95,6 @@ class Delete_All { } } - /** - * Redirect, including a flag to indicate if the bulk process was scheduled successfully - * - * @param bool $succeeded Whether or not the bulk-delete was scheduled - */ - public static function redirect( $succeeded = false ) { - $redirect = wp_unslash( $_SERVER['REQUEST_URI'] ); - - // Remove arguments that could re-trigger this bulk-edit - $redirect = remove_query_arg( array( '_wp_http_referer', '_wpnonce', 'delete_all', 'delete_all2', ), $redirect ); - - // Add a flag for the admin notice - $redirect = add_query_arg( self::ADMIN_NOTICE_KEY, $succeeded ? 1 : -1, $redirect ); - - $redirect = esc_url_raw( $redirect ); - wp_safe_redirect( $redirect ); - exit; - } - /** * Let the user know what's going on */ diff --git a/includes/class-main.php b/includes/class-main.php index 841e4f52aba368e69045c733bfd3468ddeb10a22..a61d63d0ea920b04e4e741f2b9d6ee7cf500a217 100644 --- a/includes/class-main.php +++ b/includes/class-main.php @@ -154,6 +154,29 @@ class Main { unset( $_REQUEST['delete_all'] ); unset( $_REQUEST['delete_all2'] ); } + + /** + * Redirect, including a flag to indicate if the bulk process was scheduled successfully + * + * @param string $return_key Key to include in redirect URL to flag request's origin, use for admin feedback, etc. + * @param bool $succeeded Whether or not the bulk-delete was scheduled + * @param array $extra_keys Array of additional action keys to remove from redirect URL. Optional. + */ + public static function do_admin_redirect( $return_key, $succeeded = false, $extra_keys = array() ) { + $redirect = wp_unslash( $_SERVER['REQUEST_URI'] ); + + // Remove arguments that could re-trigger this bulk-edit + $action_keys = array( '_wp_http_referer', '_wpnonce', 'action', 'action2', ); + $action_keys = array_merge( $action_keys, $extra_keys ); + $redirect = remove_query_arg( $action_keys, $redirect ); + + // Add a flag for the admin notice + $redirect = add_query_arg( $return_key, $succeeded ? 1 : -1, $redirect ); + + $redirect = esc_url_raw( $redirect ); + wp_safe_redirect( $redirect ); + exit; + } } Main::load();