remove_user_from_blog

The timeline below displays how wordpress function remove_user_from_blog has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

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;
}

WordPress Version: 6.1

/**
 * 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');
        }
    }
    restore_current_blog();
    return true;
}

WordPress Version: 5.4

/**
 * Remove 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);
    }
    // wp_revoke_user( $user_id );
    $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');
        }
    }
    restore_current_blog();
    return true;
}

WordPress Version: 4.9

/**
 * Remove 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 you're removing.
 * @param int    $blog_id  ID of the blog you're removing the user from.
 * @param string $reassign Optional. A user to whom to reassign posts.
 * @return true|WP_Error
 */
function remove_user_from_blog($user_id, $blog_id = '', $reassign = '')
{
    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)
     *
     * @param int $user_id User ID.
     * @param int $blog_id Blog ID.
     */
    do_action('remove_user_from_blog', $user_id, $blog_id);
    // 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);
    }
    // wp_revoke_user($user_id);
    $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');
        }
    }
    restore_current_blog();
    return true;
}

WordPress Version: 4.6

/**
 * Remove 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 1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $user_id  ID of the user you're removing.
 * @param int    $blog_id  ID of the blog you're removing the user from.
 * @param string $reassign Optional. A user to whom to reassign posts.
 * @return true|WP_Error
 */
function remove_user_from_blog($user_id, $blog_id = '', $reassign = '')
{
    global $wpdb;
    switch_to_blog($blog_id);
    $user_id = (int) $user_id;
    /**
     * Fires before a user is removed from a site.
     *
     * @since MU
     *
     * @param int $user_id User ID.
     * @param int $blog_id Blog ID.
     */
    do_action('remove_user_from_blog', $user_id, $blog_id);
    // 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);
    }
    // wp_revoke_user($user_id);
    $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');
        }
    }
    restore_current_blog();
    return true;
}

WordPress Version: 4.4

/**
 * Remove a user from a blog.
 *
 * Use the '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 1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $user_id  ID of the user you're removing.
 * @param int    $blog_id  ID of the blog you're removing the user from.
 * @param string $reassign Optional. A user to whom to reassign posts.
 * @return true|WP_Error
 */
function remove_user_from_blog($user_id, $blog_id = '', $reassign = '')
{
    global $wpdb;
    switch_to_blog($blog_id);
    $user_id = (int) $user_id;
    /**
     * Fires before a user is removed from a site.
     *
     * @since MU
     *
     * @param int $user_id User ID.
     * @param int $blog_id Blog ID.
     */
    do_action('remove_user_from_blog', $user_id, $blog_id);
    // 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);
    }
    // wp_revoke_user($user_id);
    $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');
        }
    }
    restore_current_blog();
    return true;
}

WordPress Version: 4.3

/**
 * Remove a user from a blog.
 *
 * Use the '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 1.0
 *
 * @global wpdb $wpdb
 *
 * @param int    $user_id  ID of the user you're removing.
 * @param int    $blog_id  ID of the blog you're removing the user from.
 * @param string $reassign Optional. A user to whom to reassign posts.
 * @return true|WP_Error
 */
function remove_user_from_blog($user_id, $blog_id = '', $reassign = '')
{
    global $wpdb;
    switch_to_blog($blog_id);
    $user_id = (int) $user_id;
    /**
     * Fires before a user is removed from a site.
     *
     * @since MU
     *
     * @param int $user_id User ID.
     * @param int $blog_id Blog ID.
     */
    do_action('remove_user_from_blog', $user_id, $blog_id);
    // 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);
    }
    // wp_revoke_user($user_id);
    $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');
        }
    }
    restore_current_blog();
    return true;
}

WordPress Version: 3.9

/**
 * Remove a user from a blog.
 *
 * Use the '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 1.0
 *
 * @param int $user_id ID of the user you're removing.
 * @param int $blog_id ID of the blog you're removing the user from.
 * @param string $reassign Optional. A user to whom to reassign posts.
 * @return bool
 */
function remove_user_from_blog($user_id, $blog_id = '', $reassign = '')
{
    global $wpdb;
    switch_to_blog($blog_id);
    $user_id = (int) $user_id;
    /**
     * Fires before a user is removed from a site.
     *
     * @since MU
     *
     * @param int $user_id User ID.
     * @param int $blog_id Blog ID.
     */
    do_action('remove_user_from_blog', $user_id, $blog_id);
    // 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);
    }
    // wp_revoke_user($user_id);
    $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');
        }
    }
    restore_current_blog();
    return true;
}

WordPress Version: 3.8

/**
 * Remove a user from a blog.
 *
 * Use the '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 1.0
 *
 * @param int $user_id ID of the user you're removing.
 * @param int $blog_id ID of the blog you're removing the user from.
 * @param string $reassign Optional. A user to whom to reassign posts.
 * @return bool
 */
function remove_user_from_blog($user_id, $blog_id = '', $reassign = '')
{
    global $wpdb;
    switch_to_blog($blog_id);
    $user_id = (int) $user_id;
    /**
     * Fires before a user is removed from a site.
     *
     * @since MU
     *
     * @param int $user_id User ID.
     * @param int $blog_id Blog ID.
     */
    do_action('remove_user_from_blog', $user_id, $blog_id);
    // 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);
    }
    // wp_revoke_user($user_id);
    $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;
        $wpdb->query($wpdb->prepare("UPDATE {$wpdb->posts} SET post_author = %d WHERE post_author = %d", $reassign, $user_id));
        $wpdb->query($wpdb->prepare("UPDATE {$wpdb->links} SET link_owner = %d WHERE link_owner = %d", $reassign, $user_id));
    }
    restore_current_blog();
    return true;
}

WordPress Version: 3.7

/**
 * Remove a user from a blog.
 *
 * Use the '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 1.0
 *
 * @param int $user_id ID of the user you're removing.
 * @param int $blog_id ID of the blog you're removing the user from.
 * @param string $reassign Optional. A user to whom to reassign posts.
 * @return bool
 */
function remove_user_from_blog($user_id, $blog_id = '', $reassign = '')
{
    global $wpdb;
    switch_to_blog($blog_id);
    $user_id = (int) $user_id;
    do_action('remove_user_from_blog', $user_id, $blog_id);
    // 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);
    }
    // wp_revoke_user($user_id);
    $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;
        $wpdb->query($wpdb->prepare("UPDATE {$wpdb->posts} SET post_author = %d WHERE post_author = %d", $reassign, $user_id));
        $wpdb->query($wpdb->prepare("UPDATE {$wpdb->links} SET link_owner = %d WHERE link_owner = %d", $reassign, $user_id));
    }
    restore_current_blog();
    return true;
}