/**
 * Auto-update the user_nicename for a given user.
 *
 * @since 0.9.0
 *
 * @param int $user_id User id
 * @param bool $bulk Bulk upgrade flag. Defaults to false
 *
 * @uses ba_eas_do_auto_update() Do we auto-update?.
 * @uses get_userdata() To get the user object.
 * @uses apply_filters() To call the 'ba_eas_auto_update_user_nicename_structure' hook.
 * @uses ba_eas() BA_Edit_Author_Slug object.
 * @uses sanitize_title() To sanitize the new nicename.
 * @uses apply_filters() To call the 'ba_eas_pre_auto_update_user_nicename' hook.
 * @uses remove_action() To remove the 'ba_eas_auto_update_user_nicename_single' and prevent looping.
 * @uses wp_update_user() Update to new user_nicename.
 * @uses is_wp_error() To make sure update_user was successful before we clear the cache.
 * @uses ba_eas_update_nicename_cache() There’s always money in the banana stand!
 * @uses add_action() To re-add the 'ba_eas_auto_update_user_nicename_single' hook.
 *
 * @return int $user_id. False on failure
 */
function ba_eas_auto_update_user_nicename($user_id, $bulk = false)
{
    // Bail if there's no id or object
    if (empty($user_id)) {
        return false;
    }
    // If we're not bulk updating, check if we should auto-update
    if (false === $bulk) {
        // Should we auto-update
        if (!ba_eas_do_auto_update()) {
            return false;
        }
    }
    // Get WP_User object
    $user = get_userdata($user_id);
    // Double check we're still good
    if (!is_object($user) || empty($user)) {
        return false;
    }
    // Setup the user_id
    if (!empty($user->ID)) {
        $user_id = (int) $user->ID;
        // No user_id so bail
    } else {
        return false;
    }
    // Get the default nicename structure
    $structure = apply_filters('ba_eas_auto_update_user_nicename_structure', ba_eas()->default_user_nicename, $user_id);
    // Make sure we have a structure
    if (empty($structure)) {
        $structure = 'username';
    }
    // Setup the current nicename
    if (empty($user->user_nicename)) {
        $current_nicename = $user->user_nicename;
    } else {
        $current_nicename = $user->user_login;
    }
    // Setup default nicename
    $nicename = $current_nicename;
    // Setup the new nicename based on the provided structure
    switch ($structure) {
        case 'username':
            if (!empty($user->user_login)) {
                $nicename = $user->user_login;
            }
            break;
        case 'nickname':
            if (!empty($user->nickname)) {
                $nicename = $user->nickname;
            }
            break;
        case 'displayname':
            if (!empty($user->display_name)) {
                $nicename = $user->display_name;
            }
            break;
        case 'firstname':
            if (!empty($user->first_name)) {
                $nicename = $user->first_name;
            }
            break;
        case 'lastname':
            if (!empty($user->last_name)) {
                $nicename = $user->last_name;
            }
            break;
        case 'firstlast':
            if (!empty($user->first_name) && !empty($user->last_name)) {
                $nicename = $user->first_name . '-' . $user->last_name;
            }
            break;
        case 'lastfirst':
            if (!empty($user->first_name) && !empty($user->last_name)) {
                $nicename = $user->last_name . '-' . $user->first_name;
            }
            break;
    }
    // Sanitize the new nicename
    $nicename = apply_filters('ba_eas_pre_auto_update_user_nicename', sanitize_title($nicename), $user_id, $structure);
    // Bail if nothing changed
    if ($nicename == $current_nicename) {
        return $user_id;
    }
    // Remove the auto-update actions so we don't find ourselves in a loop
    remove_action('profile_update', 'ba_eas_auto_update_user_nicename_single');
    // Update if there's a change
    $user_id = wp_update_user(array('ID' => $user_id, 'user_nicename' => $nicename));
    /*
     * Since this is an action taken without the user's knowledge
     * we must fail silently here. Therefore, we only want to update
     * the cache if we're successful.
     */
    if (!empty($user_id) && !is_wp_error($user_id)) {
        // Update the nicename cache
        ba_eas_update_nicename_cache($user_id, $current_nicename, $nicename);
    }
    // Add it back in case other plugins do some updating
    add_action('profile_update', 'ba_eas_auto_update_user_nicename_single');
    return $user_id;
}
示例#2
0
/**
 * Auto-update the user_nicename for a given user.
 *
 * @since 0.9.0
 *
 * @param int    $user_id   User id.
 * @param bool   $bulk      Bulk upgrade flag. Defaults to false.
 * @param string $structure The nicename structure to use during update.
 *
 * @return bool|int User id on success. False on failure.
 */
function ba_eas_auto_update_user_nicename($user_id, $bulk = false, $structure = '')
{
    // Bail if there's no id or object.
    if (empty($user_id)) {
        return false;
    }
    // Bail if we're not bulk updating and auto-update is disabled.
    if (false === $bulk && !ba_eas_do_auto_update()) {
        return false;
    }
    // Get WP_User object.
    $user = get_userdata($user_id);
    // Double check we're still good.
    if (empty($user->ID)) {
        return false;
    }
    // Setup the user_id.
    $user_id = (int) $user->ID;
    if (empty($structure)) {
        $structure = ba_eas()->default_user_nicename;
    }
    /**
     * Filters the auto-update user nicename structure.
     *
     * @since 0.9.0
     *
     * @param string $structure The auto-update structure.
     * @param int    $user_id   The user id.
     */
    $structure = apply_filters('ba_eas_auto_update_user_nicename_structure', $structure, $user_id);
    // Make sure we have a structure.
    if (empty($structure)) {
        $structure = 'username';
    }
    // Setup the current nicename.
    $old_nicename = $user->user_login;
    if (!empty($user->user_nicename)) {
        $old_nicename = $user->user_nicename;
    }
    // Setup default nicename.
    $nicename = $old_nicename;
    // Setup the new nicename based on the provided structure.
    switch ($structure) {
        case 'username':
            if (!empty($user->user_login)) {
                $nicename = $user->user_login;
            }
            break;
        case 'nickname':
            if (!empty($user->nickname)) {
                $nicename = $user->nickname;
            }
            break;
        case 'displayname':
            if (!empty($user->display_name)) {
                $nicename = $user->display_name;
            }
            break;
        case 'firstname':
            if (!empty($user->first_name)) {
                $nicename = $user->first_name;
            }
            break;
        case 'lastname':
            if (!empty($user->last_name)) {
                $nicename = $user->last_name;
            }
            break;
        case 'firstlast':
            if (!empty($user->first_name) && !empty($user->last_name)) {
                $nicename = $user->first_name . '-' . $user->last_name;
            }
            break;
        case 'lastfirst':
            if (!empty($user->first_name) && !empty($user->last_name)) {
                $nicename = $user->last_name . '-' . $user->first_name;
            }
            break;
        case 'userid':
            $nicename = $user_id;
            break;
    }
    // Sanitize and trim the new user nicename.
    $nicename = ba_eas_trim_nicename(ba_eas_sanitize_nicename($nicename));
    /**
     * Filters the auto-updated user nicename before being saved.
     *
     * @since 0.9.0
     *
     * @param string $nicename  The new user nicename.
     * @param int    $user_id   The user id.
     * @param string $structure The auto-update structure.
     */
    $nicename = apply_filters('ba_eas_pre_auto_update_user_nicename', $nicename, $user_id, $structure);
    // Bail if nothing changed or the nicename is empty.
    if (empty($nicename) || $nicename === $old_nicename) {
        return false;
    }
    // Remove the auto-update actions so we don't find ourselves in a loop.
    remove_action('profile_update', 'ba_eas_auto_update_user_nicename');
    // Update if there's a change.
    $user_id = wp_update_user(array('ID' => $user_id, 'user_nicename' => $nicename));
    // Add it back in case other plugins do some updating.
    add_action('profile_update', 'ba_eas_auto_update_user_nicename');
    /*
     * Since this is an action taken without the user's knowledge we must fail
     * silently. Therefore, we only want to update the cache if we're successful.
     */
    if (!empty($user_id) && !is_wp_error($user_id)) {
        // Update the nicename cache.
        ba_eas_update_nicename_cache($user_id, $user, $nicename);
    }
    return $user_id;
}