Title: wp_delete_user
Published: April 25, 2014
Last modified: April 28, 2025

---

# wp_delete_user( int $id, int $reassign = null ): bool

## In this article

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

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

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

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

Note that on a Multisite installation the user only gets removed from the site and
does not get deleted from the database.

If the `$reassign` parameter is not assigned to a user ID, then all posts will be
deleted of that user. The action [‘delete_user’](https://developer.wordpress.org/reference/hooks/delete_user/)
that is passed the user ID being deleted will be run after the posts are either 
reassigned or deleted.
The user meta will also be deleted that are for that user
ID.

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

 `$id`intrequired

User ID.

`$reassign`intoptional

Reassign posts and links to new User ID.

Default:`null`

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

 bool True when finished.

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

 * If you wish to use this function in a plugin then you must include the ./wp-admin/
   includes/user.php file in your plugin function, else it will throw a ‘call to
   undefined function’ error
 * Uses global: (object) [$wpdb](https://codex.wordpress.org/Class_Reference/wpdb)
 * This is an Admin function.
 * Uses: [do_action()](https://developer.wordpress.org/reference/functions/do_action/)
   Calls [‘deleted_user’](https://developer.wordpress.org/reference/hooks/deleted_user/)
   hook

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

    ```php
    function wp_delete_user( $id, $reassign = null ) {
    	global $wpdb;

    	if ( ! is_numeric( $id ) ) {
    		return false;
    	}

    	$id   = (int) $id;
    	$user = new WP_User( $id );

    	if ( ! $user->exists() ) {
    		return false;
    	}

    	// Normalize $reassign to null or a user ID. 'novalue' was an older default.
    	if ( 'novalue' === $reassign ) {
    		$reassign = null;
    	} elseif ( null !== $reassign ) {
    		$reassign = (int) $reassign;
    	}

    	/**
    	 * Fires immediately before a user is deleted from the site.
    	 *
    	 * Note that on a Multisite installation the user only gets removed from the site
    	 * and does not get deleted from the database.
    	 *
    	 * @since 2.0.0
    	 * @since 5.5.0 Added the `$user` parameter.
    	 *
    	 * @param int      $id       ID of the user to delete.
    	 * @param int|null $reassign ID of the user to reassign posts and links to.
    	 *                           Default null, for no reassignment.
    	 * @param WP_User  $user     WP_User object of the user to delete.
    	 */
    	do_action( 'delete_user', $id, $reassign, $user );

    	if ( null === $reassign ) {
    		$post_types_to_delete = array();
    		foreach ( get_post_types( array(), 'objects' ) as $post_type ) {
    			if ( $post_type->delete_with_user ) {
    				$post_types_to_delete[] = $post_type->name;
    			} elseif ( null === $post_type->delete_with_user && post_type_supports( $post_type->name, 'author' ) ) {
    				$post_types_to_delete[] = $post_type->name;
    			}
    		}

    		/**
    		 * Filters the list of post types to delete with a user.
    		 *
    		 * @since 3.4.0
    		 *
    		 * @param string[] $post_types_to_delete Array of post types to delete.
    		 * @param int      $id                   User ID.
    		 */
    		$post_types_to_delete = apply_filters( 'post_types_to_delete_with_user', $post_types_to_delete, $id );
    		$post_types_to_delete = implode( "', '", $post_types_to_delete );
    		$post_ids             = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d AND post_type IN ('$post_types_to_delete')", $id ) );
    		if ( $post_ids ) {
    			foreach ( $post_ids as $post_id ) {
    				wp_delete_post( $post_id );
    			}
    		}

    		// Clean links.
    		$link_ids = $wpdb->get_col( $wpdb->prepare( "SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id ) );

    		if ( $link_ids ) {
    			foreach ( $link_ids as $link_id ) {
    				wp_delete_link( $link_id );
    			}
    		}
    	} else {
    		$post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d", $id ) );
    		$wpdb->update( $wpdb->posts, array( 'post_author' => $reassign ), array( 'post_author' => $id ) );
    		if ( ! empty( $post_ids ) ) {
    			foreach ( $post_ids as $post_id ) {
    				clean_post_cache( $post_id );
    			}
    		}
    		$link_ids = $wpdb->get_col( $wpdb->prepare( "SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id ) );
    		$wpdb->update( $wpdb->links, array( 'link_owner' => $reassign ), array( 'link_owner' => $id ) );
    		if ( ! empty( $link_ids ) ) {
    			foreach ( $link_ids as $link_id ) {
    				clean_bookmark_cache( $link_id );
    			}
    		}
    	}

    	// FINALLY, delete user.
    	if ( is_multisite() ) {
    		remove_user_from_blog( $id, get_current_blog_id() );
    	} else {
    		$meta = $wpdb->get_col( $wpdb->prepare( "SELECT umeta_id FROM $wpdb->usermeta WHERE user_id = %d", $id ) );
    		foreach ( $meta as $mid ) {
    			delete_metadata_by_mid( 'user', $mid );
    		}

    		$wpdb->delete( $wpdb->users, array( 'ID' => $id ) );
    	}

    	clean_user_cache( $user );

    	/**
    	 * Fires immediately after a user is deleted from the site.
    	 *
    	 * Note that on a Multisite installation the user may not have been deleted from
    	 * the database depending on whether `wp_delete_user()` or `wpmu_delete_user()`
    	 * was called.
    	 *
    	 * @since 2.9.0
    	 * @since 5.5.0 Added the `$user` parameter.
    	 *
    	 * @param int      $id       ID of the deleted user.
    	 * @param int|null $reassign ID of the user to reassign posts and links to.
    	 *                           Default null, for no reassignment.
    	 * @param WP_User  $user     WP_User object of the deleted user.
    	 */
    	do_action( 'deleted_user', $id, $reassign, $user );

    	return true;
    }
    ```

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

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

 [do_action( ‘deleted_user’, int $id, int|null $reassign, WP_User $user )](https://developer.wordpress.org/reference/hooks/deleted_user/)

Fires immediately after a user is deleted from the site.

 [do_action( ‘delete_user’, int $id, int|null $reassign, WP_User $user )](https://developer.wordpress.org/reference/hooks/delete_user/)

Fires immediately before a user is deleted from the site.

 [apply_filters( ‘post_types_to_delete_with_user’, string[] $post_types_to_delete, int $id )](https://developer.wordpress.org/reference/hooks/post_types_to_delete_with_user/)

Filters the list of post types to delete with a user.

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

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

Deletes a specified link from the database.

  | 
| [WP_User::__construct()](https://developer.wordpress.org/reference/classes/wp_user/__construct/)`wp-includes/class-wp-user.php` |

Constructor.

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

Cleans all user caches.

  | 
| [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_post()](https://developer.wordpress.org/reference/functions/wp_delete_post/)`wp-includes/post.php` |

Trashes or deletes a post or page.

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

Checks a post type’s support for a given feature.

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

Deletes the bookmark cache.

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

Removes a user from a blog.

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

Retrieves one column 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::delete()](https://developer.wordpress.org/reference/classes/wpdb/delete/)`wp-includes/class-wpdb.php` |

Deletes a row in the table.

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

Deletes metadata by meta ID.

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

Determines whether Multisite is enabled.

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

Retrieves the current site ID.

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

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

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

Gets a list of all registered post type objects.

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

Prepares a SQL query for safe execution.

  |

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

| Used by | Description | 
| [WP_REST_Users_Controller::delete_item()](https://developer.wordpress.org/reference/classes/wp_rest_users_controller/delete_item/)`wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php` |

Deletes a single user.

  |

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

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

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

 1.   [Skip to note 3 content](https://developer.wordpress.org/reference/functions/wp_delete_user/?output_format=md#comment-content-733)
 2.    [Codex](https://profiles.wordpress.org/codex/)  [  11 years ago  ](https://developer.wordpress.org/reference/functions/wp_delete_user/#comment-733)
 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_user%2F%23comment-733)
     Vote results for this note: 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_user%2F%23comment-733)
 4.  Allow users to terminate their user accounts.
 5.      ```php
         if ( is_user_logged_in() && ! empty( $_GET['DeleteMyAccount'] ) ) {
         	add_action( 'init', 'wpdocs_remove_logged_in_user' );
         }
     
         /**
          * Remove the logged in user.
          */
         function wpdocs_remove_logged_in_user() {
         	// Verify that the user intended to take this action.
         	if ( ! wp_verify_nonce( 'delete_account' ) ) {
         		return;
         	}
     
         	require_once( ABSPATH.'wp-admin/includes/user.php' );
         	$current_user = wp_get_current_user();
         	wp_delete_user( $current_user->ID );
         }
         ```
     
 6.   [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_user%2F%3Freplytocom%3D733%23feedback-editor-733)
 7.   [Skip to note 4 content](https://developer.wordpress.org/reference/functions/wp_delete_user/?output_format=md#comment-content-3759)
 8.    [Muhammad Faizan Haidar](https://profiles.wordpress.org/muhammadfaizanhaidar/)
     [  6 years ago  ](https://developer.wordpress.org/reference/functions/wp_delete_user/#comment-3759)
 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_user%2F%23comment-3759)
     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_user%2F%23comment-3759)
 10.     ```php
         /**
         * Delete User based on some meta keys
         * Check For Deletion Status if it is 1 then user is deleted
         **/
         $site_id     = 123;
         $client_id   = 1;
         $mem_id      = 2;
         require_once( ABSPATH.'wp-admin/includes/user.php' );
         //get single user based on multiple meta keys
         $user = 
               reset(
                    get_users(
                       array(
                             'role'       => 'subscriber',
                             'count_total'=> false,
                             'number'     => 1,
                             'meta_query' => array(
                                 array(
                                     'key'     => 'mb_client_id',
                                     'value'   => $client_id,
                                     'compare' => '=='
                                 ),
                                 array(
                                     'key'     => 'mb_site_id',
                                     'value'   => $site_id,
                                     'compare' => '=='
                                 ),
                                 array(
                                     'key'     => 'mb_membership_id',
                                     'value'   => $mem_id,
                                     'compare' => '=='
                                 )
                             )
                         )
                     )
                 );
         // If user exists
         if ( $user ) {
         	$response = wp_delete_user( $user->ID );
             if ( $response == 1 ) {
         	return array(
         		'code'   => 'valid_data',
                 'data'   => array(
                 'status' => 200,
                 )
               );
             } else {
         			wp_die( "user_not_deleted" );
               }
          } else {
         		wp_die( "user_not_deleted" );
          }
         ```
     
 11.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_delete_user%2F%3Freplytocom%3D3759%23feedback-editor-3759)

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