Title: wp_delete_post
Published: April 25, 2014
Last modified: February 24, 2026

---

# wp_delete_post( int $post_id, bool $force_delete = false ): 󠀁[WP_Post](https://developer.wordpress.org/reference/classes/wp_post/)󠁿|false|null

## In this article

 * [Description](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#description)
    - [See also](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#see-also)
 * [Parameters](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#return)
 * [More Information](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#more-information)
 * [Source](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#source)
 * [Hooks](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#hooks)
 * [Related](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#changelog)
 * [User Contributed Notes](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#user-contributed-notes)

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

Trashes or deletes a post or page.

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

When the post and page is permanently deleted, everything that is tied to it is 
deleted also. This includes comments, post meta fields, and terms associated with
the post.

The post or page is moved to Trash instead of permanently deleted unless Trash is
disabled, item is already in the Trash, or $force_delete is true.

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

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

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

 `$post_id`intrequired

Post ID. (The default of 0 is for historical reasons; providing it is incorrect.)

`$force_delete`booloptional

Whether to bypass Trash and force deletion.

Default:`false`

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

 [WP_Post](https://developer.wordpress.org/reference/classes/wp_post/)|false|null
Post data on success, false or null on failure.

## 󠀁[More Information](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#more-information)󠁿

[wp_delete_post()](https://developer.wordpress.org/reference/functions/wp_delete_post/)
automatically reverts to [wp_trash_post()](https://codex.wordpress.org/Function_Reference/wp_trash_post)
if $force_delete is _false_, the post_type of $postid is _page_ or _post_, $postid
is not already in the trash **and** if [that trash feature](https://wordpress.org/support/article/editing-wp-config-php/)
enabled (which it it is by default).

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

    ```php
    function wp_delete_post( $post_id = 0, $force_delete = false ) {
    	global $wpdb;

    	$post_id = (int) $post_id;
    	if ( $post_id <= 0 ) {
    		_doing_it_wrong( __FUNCTION__, __( 'The post ID must be greater than 0.' ), '6.9.0' );
    		return false;
    	}

    	$post = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = %d", $post_id ) );

    	if ( ! $post ) {
    		return $post;
    	}

    	$post = get_post( $post );

    	if ( ! $force_delete
    		&& ( 'post' === $post->post_type || 'page' === $post->post_type )
    		&& 'trash' !== get_post_status( $post_id ) && EMPTY_TRASH_DAYS
    	) {
    		return wp_trash_post( $post_id );
    	}

    	if ( 'attachment' === $post->post_type ) {
    		return wp_delete_attachment( $post_id, $force_delete );
    	}

    	/**
    	 * Filters whether a post deletion should take place.
    	 *
    	 * @since 4.4.0
    	 *
    	 * @param WP_Post|false|null $check        Whether to go forward with deletion. Anything other than null will short-circuit deletion.
    	 * @param WP_Post            $post         Post object.
    	 * @param bool               $force_delete Whether to bypass the Trash.
    	 */
    	$check = apply_filters( 'pre_delete_post', null, $post, $force_delete );
    	if ( null !== $check ) {
    		return $check;
    	}

    	/**
    	 * Fires before a post is deleted, at the start of wp_delete_post().
    	 *
    	 * @since 3.2.0
    	 * @since 5.5.0 Added the `$post` parameter.
    	 *
    	 * @see wp_delete_post()
    	 *
    	 * @param int     $post_id Post ID.
    	 * @param WP_Post $post    Post object.
    	 */
    	do_action( 'before_delete_post', $post_id, $post );

    	delete_post_meta( $post_id, '_wp_trash_meta_status' );
    	delete_post_meta( $post_id, '_wp_trash_meta_time' );

    	wp_delete_object_term_relationships( $post_id, get_object_taxonomies( $post->post_type ) );

    	$parent_data  = array( 'post_parent' => $post->post_parent );
    	$parent_where = array( 'post_parent' => $post_id );

    	if ( is_post_type_hierarchical( $post->post_type ) ) {
    		// Point children of this page to its parent, also clean the cache of affected children.
    		$children_query = $wpdb->prepare(
    			"SELECT * FROM $wpdb->posts WHERE post_parent = %d AND post_type = %s",
    			$post_id,
    			$post->post_type
    		);

    		$children = $wpdb->get_results( $children_query );

    		if ( $children ) {
    			$wpdb->update( $wpdb->posts, $parent_data, $parent_where + array( 'post_type' => $post->post_type ) );
    		}
    	}

    	// Do raw query. wp_get_post_revisions() is filtered.
    	$revision_ids = $wpdb->get_col(
    		$wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'revision'", $post_id )
    	);

    	// Use wp_delete_post (via wp_delete_post_revision) again. Ensures any meta/misplaced data gets cleaned up.
    	foreach ( $revision_ids as $revision_id ) {
    		wp_delete_post_revision( $revision_id );
    	}

    	// Point all attachments to this post up one level.
    	$wpdb->update( $wpdb->posts, $parent_data, $parent_where + array( 'post_type' => 'attachment' ) );

    	wp_defer_comment_counting( true );

    	$comment_ids = $wpdb->get_col(
    		$wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d ORDER BY comment_ID DESC", $post_id )
    	);

    	foreach ( $comment_ids as $comment_id ) {
    		wp_delete_comment( $comment_id, true );
    	}

    	wp_defer_comment_counting( false );

    	$post_meta_ids = $wpdb->get_col(
    		$wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $post_id )
    	);

    	foreach ( $post_meta_ids as $mid ) {
    		delete_metadata_by_mid( 'post', $mid );
    	}

    	/**
    	 * Fires immediately before a post is deleted from the database.
    	 *
    	 * The dynamic portion of the hook name, `$post->post_type`, refers to
    	 * the post type slug.
    	 *
    	 * @since 6.6.0
    	 *
    	 * @param int     $post_id Post ID.
    	 * @param WP_Post $post    Post object.
    	 */
    	do_action( "delete_post_{$post->post_type}", $post_id, $post );

    	/**
    	 * Fires immediately before a post is deleted from the database.
    	 *
    	 * @since 1.2.0
    	 * @since 5.5.0 Added the `$post` parameter.
    	 *
    	 * @param int     $post_id Post ID.
    	 * @param WP_Post $post    Post object.
    	 */
    	do_action( 'delete_post', $post_id, $post );

    	$result = $wpdb->delete( $wpdb->posts, array( 'ID' => $post_id ) );
    	if ( ! $result ) {
    		return false;
    	}

    	/**
    	 * Fires immediately after a post is deleted from the database.
    	 *
    	 * The dynamic portion of the hook name, `$post->post_type`, refers to
    	 * the post type slug.
    	 *
    	 * @since 6.6.0
    	 *
    	 * @param int     $post_id Post ID.
    	 * @param WP_Post $post    Post object.
    	 */
    	do_action( "deleted_post_{$post->post_type}", $post_id, $post );

    	/**
    	 * Fires immediately after a post is deleted from the database.
    	 *
    	 * @since 2.2.0
    	 * @since 5.5.0 Added the `$post` parameter.
    	 *
    	 * @param int     $post_id Post ID.
    	 * @param WP_Post $post    Post object.
    	 */
    	do_action( 'deleted_post', $post_id, $post );

    	clean_post_cache( $post );

    	if ( is_post_type_hierarchical( $post->post_type ) && $children ) {
    		foreach ( $children as $child ) {
    			clean_post_cache( $child );
    		}
    	}

    	wp_clear_scheduled_hook( 'publish_future_post', array( $post_id ) );

    	/**
    	 * Fires after a post is deleted, at the conclusion of wp_delete_post().
    	 *
    	 * @since 3.2.0
    	 * @since 5.5.0 Added the `$post` parameter.
    	 *
    	 * @see wp_delete_post()
    	 *
    	 * @param int     $post_id Post ID.
    	 * @param WP_Post $post    Post object.
    	 */
    	do_action( 'after_delete_post', $post_id, $post );

    	return $post;
    }
    ```

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

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

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

Fires after a post is deleted, at the conclusion of [wp_delete_post()](https://developer.wordpress.org/reference/functions/wp_delete_post/).

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

Fires before a post is deleted, at the start of [wp_delete_post()](https://developer.wordpress.org/reference/functions/wp_delete_post/).

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

Fires immediately after a post is deleted from the database.

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

Fires immediately after a post is deleted from the database.

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

Fires immediately before a post is deleted from the database.

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

Fires immediately before a post is deleted from the database.

 [apply_filters( ‘pre_delete_post’, WP_Post|false|null $check, WP_Post $post, bool $force_delete )](https://developer.wordpress.org/reference/hooks/pre_delete_post/)

Filters whether a post deletion should take place.

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

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

Unschedules all events attached to the hook with the specified arguments.

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

Unlinks the object from the taxonomy or taxonomies.

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

Returns the names or objects of the taxonomies which are registered for the requested object or object type, such as a post object or post type name.

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

Will clean the post in the cache.

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

Trashes or deletes an attachment.

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

Moves a post or page to the Trash

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

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

Determines whether the post type is hierarchical.

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

Deletes a revision.

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

Retrieves one row from the database.

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

Updates a row in the table.

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

Retrieves one column from the database.

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

Deletes a row in the table.

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

Determines whether to defer comment counting.

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

Trashes or deletes a comment.

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

Deletes metadata by meta ID.

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

Retrieves the translation of $text.

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

Marks something as being incorrectly called.

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

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

Retrieves an entire SQL result set from the database (i.e., many rows).

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

Prepares a SQL query for safe execution.

  |

[Show 19 more](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#)

| Used by | Description | 
| [_wp_after_delete_font_family()](https://developer.wordpress.org/reference/functions/_wp_after_delete_font_family/)`wp-includes/fonts.php` |

Deletes child font faces when a font family is deleted.

  | 
| [WP_REST_Menu_Items_Controller::delete_item()](https://developer.wordpress.org/reference/classes/wp_rest_menu_items_controller/delete_item/)`wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php` |

Deletes a single nav menu item.

  | 
| [WP_REST_Templates_Controller::update_item()](https://developer.wordpress.org/reference/classes/wp_rest_templates_controller/update_item/)`wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php` |

Updates a single template.

  | 
| [WP_REST_Templates_Controller::delete_item()](https://developer.wordpress.org/reference/classes/wp_rest_templates_controller/delete_item/)`wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php` |

Deletes a single template.

  | 
| [WP_Privacy_Requests_Table::process_bulk_action()](https://developer.wordpress.org/reference/classes/wp_privacy_requests_table/process_bulk_action/)`wp-admin/includes/class-wp-privacy-requests-table.php` |

Process bulk actions.

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

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

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

Trashes or deletes a changeset post.

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

Deletes auto-draft posts associated with the supplied changeset.

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

Saves the post for the loaded changeset.

  | 
| [WP_REST_Revisions_Controller::delete_item()](https://developer.wordpress.org/reference/classes/wp_rest_revisions_controller/delete_item/)`wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php` |

Deletes a single revision.

  | 
| [WP_REST_Posts_Controller::delete_item()](https://developer.wordpress.org/reference/classes/wp_rest_posts_controller/delete_item/)`wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php` |

Deletes a single post.

  | 
| [WP_Customize_Nav_Menu_Item_Setting::update()](https://developer.wordpress.org/reference/classes/wp_customize_nav_menu_item_setting/update/)`wp-includes/customize/class-wp-customize-nav-menu-item-setting.php` |

Creates/updates the nav_menu_item post for this setting.

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

Deletes a user and all of their posts from the network.

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

Delete user and optionally reassign posts and links to another user.

  | 
| [wp_ajax_save_attachment()](https://developer.wordpress.org/reference/functions/wp_ajax_save_attachment/)`wp-admin/includes/ajax-actions.php` |

Handles updating attachment attributes via AJAX.

  | 
| [wp_ajax_delete_post()](https://developer.wordpress.org/reference/functions/wp_ajax_delete_post/)`wp-admin/includes/ajax-actions.php` |

Handles deleting a post via AJAX.

  | 
| [wp_ajax_delete_page()](https://developer.wordpress.org/reference/functions/wp_ajax_delete_page/)`wp-admin/includes/ajax-actions.php` |

Handles deleting a page via AJAX.

  | 
| [_wp_delete_orphaned_draft_menu_items()](https://developer.wordpress.org/reference/functions/_wp_delete_orphaned_draft_menu_items/)`wp-admin/includes/nav-menu.php` |

Deletes orphaned draft menu items

  | 
| [wp_nav_menu_update_menu_items()](https://developer.wordpress.org/reference/functions/wp_nav_menu_update_menu_items/)`wp-admin/includes/nav-menu.php` |

Saves nav menu items.

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

Permanently deletes comments or posts of any type that have held a status of ‘trash’ for the number of days defined in EMPTY_TRASH_DAYS.

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

Deletes auto-drafts for new posts that are > 7 days old.

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

Moves a post or page to the Trash

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

Deletes a revision.

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

Callback for handling a menu item when its original object is deleted.

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

Serves as a callback for handling a menu item when its original object is deleted.

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

Deletes a navigation menu.

  | 
| [wp_xmlrpc_server::blogger_deletePost()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/blogger_deletepost/)`wp-includes/class-wp-xmlrpc-server.php` |

Deletes a post.

  | 
| [wp_xmlrpc_server::wp_deletePage()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_deletepage/)`wp-includes/class-wp-xmlrpc-server.php` |

Deletes a page.

  | 
| [wp_xmlrpc_server::wp_deletePost()](https://developer.wordpress.org/reference/classes/wp_xmlrpc_server/wp_deletepost/)`wp-includes/class-wp-xmlrpc-server.php` |

Deletes a post for any registered post type.

  |

[Show 24 more](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#)

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

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

## 󠀁[User Contributed Notes](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#user-contributed-notes)󠁿

 1.   [Skip to note 4 content](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#comment-content-3659)
 2.    [Tim](https://profiles.wordpress.org/tkaufmann/)  [  6 years ago  ](https://developer.wordpress.org/reference/functions/wp_delete_post/#comment-3659)
 3.  [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_post%2F%23comment-3659)
     Vote results for this note: 15[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_post%2F%23comment-3659)
 4.  Beware: Custom Post Types will be deleted (not moved to trash) disregarding the
     $force_delete parameter. Use [wp_trash_post()](https://developer.wordpress.org/reference/functions/wp_trash_post/)
     if you want to move a custom post to trash.
 5.   * Thank you! This information should really be part of the documentation!
      * [enkirch](https://profiles.wordpress.org/enkirch/) [4 years ago](https://developer.wordpress.org/reference/functions/wp_delete_post/#comment-5942)
 6.   [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_post%2F%3Freplytocom%3D3659%23feedback-editor-3659)
 7.   [Skip to note 5 content](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#comment-content-1210)
 8.    [Said El Bakkali](https://profiles.wordpress.org/sa3idho/)  [  10 years ago  ](https://developer.wordpress.org/reference/functions/wp_delete_post/#comment-1210)
 9.  [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_post%2F%23comment-1210)
     Vote results for this note: 2[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_post%2F%23comment-1210)
 10.     ```php
         /**
          * Deletes all posts from "products" custom post type.
          */
         function wpdocs_delete_all_products() {
             $myproducts = get_pages( array( 'post_type' => 'products') );
     
             foreach ( $myproducts as $myproduct ) {
                 // Delete all products.
                 wp_delete_post( $myproduct->ID, true); // Set to False if you want to send them to Trash.
             } 
         }
         add_action( 'init', 'wpdocs_delete_all_products' );
         ```
     
 11.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_post%2F%3Freplytocom%3D1210%23feedback-editor-1210)
 12.  [Skip to note 6 content](https://developer.wordpress.org/reference/functions/wp_delete_post/?output_format=md#comment-content-593)
 13.   [Codex](https://profiles.wordpress.org/codex/)  [  11 years ago  ](https://developer.wordpress.org/reference/functions/wp_delete_post/#comment-593)
 14. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_post%2F%23comment-593)
     Vote results for this note: 1[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_post%2F%23comment-593)
 15. **Delete Post**
      Deleting the WP default post “Hello World” which has ID 1.
 16.     ```php
          <?php wp_delete_post(1); ?> 
         ```
     
 17.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_post%2F%3Freplytocom%3D593%23feedback-editor-593)

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