WordPress Version: 6.3
/**
* Removes a user from a blog.
*
* Use the {@see 'remove_user_from_blog'} action to fire an event when
* users are removed from a blog.
*
* Accepts an optional `$reassign` parameter, if you want to
* reassign the user's blog posts to another user upon removal.
*
* @since MU (3.0.0)
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param int $user_id ID of the user being removed.
* @param int $blog_id Optional. ID of the blog the user is being removed from. Default 0.
* @param int $reassign Optional. ID of the user to whom to reassign posts. Default 0.
* @return true|WP_Error True on success or a WP_Error object if the user doesn't exist.
*/
function remove_user_from_blog($user_id, $blog_id = 0, $reassign = 0)
{
global $wpdb;
switch_to_blog($blog_id);
$user_id = (int) $user_id;
/**
* Fires before a user is removed from a site.
*
* @since MU (3.0.0)
* @since 5.4.0 Added the `$reassign` parameter.
*
* @param int $user_id ID of the user being removed.
* @param int $blog_id ID of the blog the user is being removed from.
* @param int $reassign ID of the user to whom to reassign posts.
*/
do_action('remove_user_from_blog', $user_id, $blog_id, $reassign);
/*
* If being removed from the primary blog, set a new primary
* if the user is assigned to multiple blogs.
*/
$primary_blog = get_user_meta($user_id, 'primary_blog', true);
if ($primary_blog == $blog_id) {
$new_id = '';
$new_domain = '';
$blogs = get_blogs_of_user($user_id);
foreach ((array) $blogs as $blog) {
if ($blog->userblog_id == $blog_id) {
continue;
}
$new_id = $blog->userblog_id;
$new_domain = $blog->domain;
break;
}
update_user_meta($user_id, 'primary_blog', $new_id);
update_user_meta($user_id, 'source_domain', $new_domain);
}
$user = get_userdata($user_id);
if (!$user) {
restore_current_blog();
return new WP_Error('user_does_not_exist', __('That user does not exist.'));
}
$user->remove_all_caps();
$blogs = get_blogs_of_user($user_id);
if (count($blogs) === 0) {
update_user_meta($user_id, 'primary_blog', '');
update_user_meta($user_id, 'source_domain', '');
}
if ($reassign) {
$reassign = (int) $reassign;
$post_ids = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_author = %d", $user_id));
$link_ids = $wpdb->get_col($wpdb->prepare("SELECT link_id FROM {$wpdb->links} WHERE link_owner = %d", $user_id));
if (!empty($post_ids)) {
$wpdb->query($wpdb->prepare("UPDATE {$wpdb->posts} SET post_author = %d WHERE post_author = %d", $reassign, $user_id));
array_walk($post_ids, 'clean_post_cache');
}
if (!empty($link_ids)) {
$wpdb->query($wpdb->prepare("UPDATE {$wpdb->links} SET link_owner = %d WHERE link_owner = %d", $reassign, $user_id));
array_walk($link_ids, 'clean_bookmark_cache');
}
}
clean_user_cache($user_id);
restore_current_blog();
return true;
}