wp_delete_user() WP 2.0.0

Видаляє користувача. За бажанням, перекидає пости та посилання на іншого користувача.

Метадані користувача також видаляються.

На фронті вимагає підключення файлу:

require_once ABSPATH. 'wp-admin/includes/user.php';

Фільтр delete_user , який надає ID користувача, спрацьовує відразу після видалення та перепризначення постів.

Повертає

true|false. true – вдалося видалити. false – не вдалося видалити.

Використання

wp_delete_user($id, $reassign);
$id
(число) (обов’язковий)
ID користувача, якого потрібно видалити.
$reassign
(число)
ID користувача на якого потрібно перекинути всі пости та посилання, що видаляється.

Якщо не вказати цей параметр, всі пости видаленого користувача будуть також видалені.

Приклади

0

#1 Видалимо користувача 2 і перекинемо всі його пости користувачеві 4

Виведемо повідомлення про видалення:

$ id = 2;
$ new_id = 4;

$del = wp_delete_user($id, $new_id);

if($del)
	echo "користувач $id був видалений! А автором всіх його постів став користувач - $new_id.";
else
	echo "не вдалося видалити користувача. Може його вже чи зовсім немає?";

нотатки

  • Global. wpdb. $wpdb WordPress database abstraction object.

список змін

З версії 2.0.0Введено.

Код wp_delete_user() WP 6.0.2

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 inmediate before a user is deleted from the database.
	 *
	 * @ Since 2.0.0
	 * @since 5.5.0 Added `$user` parameter.
	 *
	 * @param int $id ID для користувача до delete.
	 * @param int|null $reassign ID користувача, щоб 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 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 database.
	 *
	 * @ Since 2.9.0
	 * @since 5.5.0 Added `$user` parameter.
	 *
	 * @param int $id ID з вибраним користувачем.
	 * @param int|null $reassign ID користувача, щоб reassign posts and links to.
	 * Default null, for no reassignment.
	 * @param WP_User $user WP_User object of deleted user.
	 */
	do_action( 'deleted_user', $id, $reassign, $user);

	return true;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *