## Функция WP_DELETE_USER() │ WP 2.0.0
Функция WP_DELETE_USER() используется для удаления пользователя и, при необходимости, переназначения его сообщений и ссылок другому пользователю.
Обратите внимание: в установке Multisite пользователь удаляется только с текущего сайта, но ост��ется в базе данных.
Если параметр $reassign не указан, все сообщения пользователя будут удалены. Данная функция выполняет хук delete_user, который вызывается после переназначения сообщений или их удаления. Также будет удалена пользовательская метаинформация для этого пользователя.
### Хуки функции
- delete_user
- post_types_to_delete_with_user
- deleted_user
### Возвращаемое значение
Эта функция возвращает true или false. true означает, что пользователь успешно удален.
### Использование
```php
wp_delete_user( $id, $reassign );
$id(int) (обязательный) — ID пользователя.$reassign(int) — ID нового пользователя для переназначения сообщений и ссылок.- По умолчанию:
null.
- По умолчанию:
Примеры
Пример 1: Удаление пользователя и перенос сообщений
Этот пример удаляет пользователя с ID 2 и переносит все его сообщения к пользователю с ID 4:
$id = 2;
$new_id = 4;
$del = wp_delete_user( $id, $new_id );
if( $del ){
echo "Пользователь $id был удален! Автором всех его сообщений стал пользователь $new_id.";
}
else {
echo "Не удалось удалить пользователя. Возможно, он не существует.";
}
Пример 2: Позволяем пользователям удалять свои аккаунты
Этот код позволяет пользователям, которые вошли в систему, удалить свои аккаунты:
if ( is_user_logged_in() && ! empty( $_GET['DeleteMyAccount'] ) ) {
add_action( 'init', 'wpdocs_remove_logged_in_user' );
}
/**
* Удаляет вошедшего пользователя.
*/
function wpdocs_remove_logged_in_user() {
// Проверка, что пользователь действительно хочет выполнить это действие.
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 );
}
Пример 3: Удаление пользователя на основе мета-ключей
Этот пример демонстрирует, как удалить пользователя на основе определенных мета-ключей:
$site_id = 123;
$client_id = 1;
$mem_id = 2;
require_once ABSPATH.'wp-admin/includes/user.php';
// Получаем пользователя на основе нескольких мета-ключей
$user = get_users( [
'role' => 'subscriber',
'count_total'=> false,
'number' => 1,
'meta_query' => array(
array(
'key' => 'mb_client_id',
'value' => $client_id,
),
array(
'key' => 'mb_site_id',
'value' => $site_id,
),
array(
'key' => 'mb_membership_id',
'value' => $mem_id,
)
)
] );
$user = reset( $user );
// Если пользователь найден
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" );
}
Заметки
- Глобальная переменная:
wpdb— объект абстракции базы данных WordPress.
Изменения
Функция была введена в версии 2.0.0.
Код функции WP_DELETE_USER()
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;
}
// Нормализуем $reassign до null или ID пользователя.
if ( 'novalue' === $reassign ) {
$reassign = null;
} elseif ( null !== $reassign ) {
$reassign = (int) $reassign;
}
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;
}
}
$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 );
}
}
// Удаление ссылок.
$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 );
}
}
}
// Наконец, удаляем пользователя.
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 );
do_action( 'deleted_user', $id, $reassign, $user );
return true;
}
Связанные функции
register_new_user()wp_create_user()wp_insert_user()wp_new_user_notification()wp_update_user()