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

---

# WP_Customize_Manager::trash_changeset_post( int|WP_Post $post ): mixed

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#description)
    - [See also](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#see-also)
 * [Parameters](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#source)
 * [Hooks](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#hooks)
 * [Related](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#changelog)

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

Trashes or deletes a changeset post.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#description)󠁿

The following re-formulates the logic from `wp_trash_post()` as done in `wp_publish_post()`.
The reason for bypassing `wp_trash_post()` is that it will mutate the the `post_content`
and the `post_name` when they should be untouched.

### 󠀁[See also](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#see-also)󠁿

 * [wp_trash_post()](https://developer.wordpress.org/reference/functions/wp_trash_post/)

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#parameters)󠁿

 `$post`int|[WP_Post](https://developer.wordpress.org/reference/classes/wp_post/)
required

The changeset post.

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#return)󠁿

 mixed A [WP_Post](https://developer.wordpress.org/reference/classes/wp_post/) object
for the trashed post or an empty value on failure.

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

    ```php
    public function trash_changeset_post( $post ) {
    	global $wpdb;

    	$post = get_post( $post );

    	if ( ! ( $post instanceof WP_Post ) ) {
    		return $post;
    	}
    	$post_id = $post->ID;

    	if ( ! EMPTY_TRASH_DAYS ) {
    		return wp_delete_post( $post_id, true );
    	}

    	if ( 'trash' === get_post_status( $post ) ) {
    		return false;
    	}

    	$previous_status = $post->post_status;

    	/** This filter is documented in wp-includes/post.php */
    	$check = apply_filters( 'pre_trash_post', null, $post, $previous_status );
    	if ( null !== $check ) {
    		return $check;
    	}

    	/** This action is documented in wp-includes/post.php */
    	do_action( 'wp_trash_post', $post_id, $previous_status );

    	add_post_meta( $post_id, '_wp_trash_meta_status', $previous_status );
    	add_post_meta( $post_id, '_wp_trash_meta_time', time() );

    	$new_status = 'trash';
    	$wpdb->update( $wpdb->posts, array( 'post_status' => $new_status ), array( 'ID' => $post->ID ) );
    	clean_post_cache( $post->ID );

    	$post->post_status = $new_status;
    	wp_transition_post_status( $new_status, $previous_status, $post );

    	/** This action is documented in wp-includes/post.php */
    	do_action( "edit_post_{$post->post_type}", $post->ID, $post );

    	/** This action is documented in wp-includes/post.php */
    	do_action( 'edit_post', $post->ID, $post );

    	/** This action is documented in wp-includes/post.php */
    	do_action( "save_post_{$post->post_type}", $post->ID, $post, true );

    	/** This action is documented in wp-includes/post.php */
    	do_action( 'save_post', $post->ID, $post, true );

    	/** This action is documented in wp-includes/post.php */
    	do_action( 'wp_insert_post', $post->ID, $post, true );

    	wp_after_insert_post( get_post( $post_id ), true, $post );

    	wp_trash_post_comments( $post_id );

    	/** This action is documented in wp-includes/post.php */
    	do_action( 'trashed_post', $post_id, $previous_status );

    	return $post;
    }
    ```

[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#L3070)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/class-wp-customize-manager.php#L3070-L3132)

## 󠀁[Hooks](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?output_format=md#hooks)󠁿

 [do_action( ‘edit_post’, int $post_id, WP_Post $post )](https://developer.wordpress.org/reference/hooks/edit_post/)

Fires once an existing post has been updated.

 [do_action( “edit_post_{$post->post_type}”, int $post_id, WP_Post $post )](https://developer.wordpress.org/reference/hooks/edit_post_post-post_type/)

Fires once an existing post has been updated.

 [apply_filters( ‘pre_trash_post’, bool|null $trash, WP_Post $post, string $previous_status )](https://developer.wordpress.org/reference/hooks/pre_trash_post/)

Filters whether a post trashing should take place.

 [do_action( ‘save_post’, int $post_id, WP_Post $post, bool $update )](https://developer.wordpress.org/reference/hooks/save_post/)

Fires once a post has been saved.

 [do_action( “save_post_{$post->post_type}”, int $post_id, WP_Post $post, bool $update )](https://developer.wordpress.org/reference/hooks/save_post_post-post_type/)

Fires once a post has been saved.

 [do_action( ‘trashed_post’, int $post_id, string $previous_status )](https://developer.wordpress.org/reference/hooks/trashed_post/)

Fires after a post is sent to the Trash.

 [do_action( ‘wp_insert_post’, int $post_id, WP_Post $post, bool $update )](https://developer.wordpress.org/reference/hooks/wp_insert_post/)

Fires once a post has been saved.

 [do_action( ‘wp_trash_post’, int $post_id, string $previous_status )](https://developer.wordpress.org/reference/hooks/wp_trash_post/)

Fires before a post is sent to the Trash.

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

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

Fires actions after a post, its terms and meta data has been saved.

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

Will clean the post in the cache.

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

Fires actions related to the transitioning of a post’s status.

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

Trashes or deletes a post or page.

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

Moves comments for a post to the Trash.

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

Adds a meta field to the given post.

  | 
| [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.

  | 
| [wpdb::update()](https://developer.wordpress.org/reference/classes/wpdb/update/)`wp-includes/class-wpdb.php` |

Updates a row in the table.

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

Calls the callback functions that have been added to a filter hook.

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

Calls the callback functions that have been added to an action hook.

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

Retrieves post data given a post ID or post object.

  |

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

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

Handles request to trash a changeset.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_customize_manager/trash_changeset_post/?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%2Ftrash_changeset_post%2F)
before being able to contribute a note or feedback.