Title: WP_Customize_Manager::handle_dismiss_autosave_or_lock_request
Published: November 20, 2017
Last modified: February 24, 2026

---

# WP_Customize_Manager::handle_dismiss_autosave_or_lock_request()

## In this article

 * [Source](https://developer.wordpress.org/reference/classes/wp_customize_manager/handle_dismiss_autosave_or_lock_request/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_customize_manager/handle_dismiss_autosave_or_lock_request/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_customize_manager/handle_dismiss_autosave_or_lock_request/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_customize_manager/handle_dismiss_autosave_or_lock_request/?output_format=md#wp--skip-link--target)

Deletes a given auto-draft changeset or the autosave revision for a given changeset
or delete changeset lock.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_customize_manager/handle_dismiss_autosave_or_lock_request/?output_format=md#source)󠁿

    ```php
    public function handle_dismiss_autosave_or_lock_request() {
    	// Calls to dismiss_user_auto_draft_changesets() and wp_get_post_autosave() require non-zero get_current_user_id().
    	if ( ! is_user_logged_in() ) {
    		wp_send_json_error( 'unauthenticated', 401 );
    	}

    	if ( ! $this->is_preview() ) {
    		wp_send_json_error( 'not_preview', 400 );
    	}

    	if ( ! check_ajax_referer( 'customize_dismiss_autosave_or_lock', 'nonce', false ) ) {
    		wp_send_json_error( 'invalid_nonce', 403 );
    	}

    	$changeset_post_id = $this->changeset_post_id();
    	$dismiss_lock      = ! empty( $_POST['dismiss_lock'] );
    	$dismiss_autosave  = ! empty( $_POST['dismiss_autosave'] );

    	if ( $dismiss_lock ) {
    		if ( empty( $changeset_post_id ) && ! $dismiss_autosave ) {
    			wp_send_json_error( 'no_changeset_to_dismiss_lock', 404 );
    		}
    		if ( ! current_user_can( get_post_type_object( 'customize_changeset' )->cap->edit_post, $changeset_post_id ) && ! $dismiss_autosave ) {
    			wp_send_json_error( 'cannot_remove_changeset_lock', 403 );
    		}

    		delete_post_meta( $changeset_post_id, '_edit_lock' );

    		if ( ! $dismiss_autosave ) {
    			wp_send_json_success( 'changeset_lock_dismissed' );
    		}
    	}

    	if ( $dismiss_autosave ) {
    		if ( empty( $changeset_post_id ) || 'auto-draft' === get_post_status( $changeset_post_id ) ) {
    			$dismissed = $this->dismiss_user_auto_draft_changesets();
    			if ( $dismissed > 0 ) {
    				wp_send_json_success( 'auto_draft_dismissed' );
    			} else {
    				wp_send_json_error( 'no_auto_draft_to_delete', 404 );
    			}
    		} else {
    			$revision = wp_get_post_autosave( $changeset_post_id, get_current_user_id() );

    			if ( $revision ) {
    				if ( ! current_user_can( get_post_type_object( 'customize_changeset' )->cap->delete_post, $changeset_post_id ) ) {
    					wp_send_json_error( 'cannot_delete_autosave_revision', 403 );
    				}

    				if ( ! wp_delete_post( $revision->ID, true ) ) {
    					wp_send_json_error( 'autosave_revision_deletion_failure', 500 );
    				} else {
    					wp_send_json_success( 'autosave_revision_deleted' );
    				}
    			} else {
    				wp_send_json_error( 'no_autosave_revision_to_delete', 404 );
    			}
    		}
    	}

    	wp_send_json_error( 'unknown_error', 500 );
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-customize-manager.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/class-wp-customize-manager.php#L3702)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/class-wp-customize-manager.php#L3702-L3763)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_customize_manager/handle_dismiss_autosave_or_lock_request/?output_format=md#related)󠁿

| Uses | Description | 
| [WP_Customize_Manager::dismiss_user_auto_draft_changesets()](https://developer.wordpress.org/reference/classes/wp_customize_manager/dismiss_user_auto_draft_changesets/)`wp-includes/class-wp-customize-manager.php` |

Dismisses all of the current user’s auto-drafts (other than the present one).

  | 
| [WP_Customize_Manager::changeset_post_id()](https://developer.wordpress.org/reference/classes/wp_customize_manager/changeset_post_id/)`wp-includes/class-wp-customize-manager.php` |

Gets the changeset post ID for the loaded changeset.

  | 
| [WP_Customize_Manager::is_preview()](https://developer.wordpress.org/reference/classes/wp_customize_manager/is_preview/)`wp-includes/class-wp-customize-manager.php` |

Determines whether it is a theme preview or not.

  | 
| [wp_delete_post()](https://developer.wordpress.org/reference/functions/wp_delete_post/)`wp-includes/post.php` |

Trashes or deletes a post or page.

  | 
| [delete_post_meta()](https://developer.wordpress.org/reference/functions/delete_post_meta/)`wp-includes/post.php` |

Deletes a post meta field for the given post ID.

  | 
| [get_post_status()](https://developer.wordpress.org/reference/functions/get_post_status/)`wp-includes/post.php` |

Retrieves the post status based on the post ID.

  | 
| [wp_get_post_autosave()](https://developer.wordpress.org/reference/functions/wp_get_post_autosave/)`wp-includes/revision.php` |

Retrieves the autosaved data of the specified post.

  | 
| [current_user_can()](https://developer.wordpress.org/reference/functions/current_user_can/)`wp-includes/capabilities.php` |

Returns whether the current user has the specified capability.

  | 
| [is_user_logged_in()](https://developer.wordpress.org/reference/functions/is_user_logged_in/)`wp-includes/pluggable.php` |

Determines whether the current visitor is a logged in user.

  | 
| [check_ajax_referer()](https://developer.wordpress.org/reference/functions/check_ajax_referer/)`wp-includes/pluggable.php` |

Verifies the Ajax request to prevent processing requests external of the blog.

  | 
| [wp_send_json_error()](https://developer.wordpress.org/reference/functions/wp_send_json_error/)`wp-includes/functions.php` |

Sends a JSON response back to an Ajax request, indicating failure.

  | 
| [wp_send_json_success()](https://developer.wordpress.org/reference/functions/wp_send_json_success/)`wp-includes/functions.php` |

Sends a JSON response back to an Ajax request, indicating success.

  | 
| [get_current_user_id()](https://developer.wordpress.org/reference/functions/get_current_user_id/)`wp-includes/user.php` |

Gets the current user’s ID.

  | 
| [get_post_type_object()](https://developer.wordpress.org/reference/functions/get_post_type_object/)`wp-includes/post.php` |

Retrieves a post type object by name.

  |

[Show 9 more](https://developer.wordpress.org/reference/classes/wp_customize_manager/handle_dismiss_autosave_or_lock_request/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/classes/wp_customize_manager/handle_dismiss_autosave_or_lock_request/?output_format=md#)

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_customize_manager/handle_dismiss_autosave_or_lock_request/?output_format=md#changelog)󠁿

| Version | Description | 
| [4.9.0](https://developer.wordpress.org/reference/since/4.9.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_customize_manager%2Fhandle_dismiss_autosave_or_lock_request%2F)
before being able to contribute a note or feedback.