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