Make WordPress Core


Ignore:
Timestamp:
04/17/2009 09:25:11 PM (17 years ago)
Author:
ryan
Message:

Cache user lookups made by nicename. Add get_user_by(). fixes #4170

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/pluggable.php

    r10967 r10992  
    140140endif;
    141141
     142/**
     143 * Retrieve user info by a given field
     144 *
     145 * @since 2.8.0
     146 *
     147 * @param string $field The field to retrieve the user with.  id | slug | email | login
     148 * @param int|string $value A value for $field.  A user ID, slug, email address, or login name.
     149 * @return bool|object False on failure, User DB row object
     150 */
     151function get_user_by($field, $value) {
     152        global $wpdb;
     153
     154        switch ($field) {
     155                case 'id':
     156                        return get_userdata($value);
     157                        break;
     158                case 'slug':
     159                        $user_id = wp_cache_get($value, 'userslugs');
     160                        $field = 'user_nicename';
     161                        break;
     162                case 'email':
     163                        $user_id = wp_cache_get($value, 'useremail');
     164                        $field = 'user_email';
     165                        break;
     166                case 'login':
     167                        $value = sanitize_user( $value );
     168                        $user_id = wp_cache_get($value, 'userlogins');
     169                        $field = 'user_login';
     170                        break;
     171                default:
     172                        return false;
     173        }
     174
     175         if ( false !== $user_id )
     176                return get_userdata($user_id);
     177
     178        if ( !$user = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->users WHERE $field = %s", $value) ) )
     179                return false;
     180
     181        _fill_user($user);
     182
     183        return $user;
     184}
     185
    142186if ( !function_exists('get_userdatabylogin') ) :
    143187/**
    … …  
    150194 */
    151195function get_userdatabylogin($user_login) {
    152         global $wpdb;
    153         $user_login = sanitize_user( $user_login );
    154 
    155         if ( empty( $user_login ) )
    156                 return false;
    157 
    158         $user_id = wp_cache_get($user_login, 'userlogins');
    159 
    160         $user = false;
    161         if ( false !== $user_id )
    162                 $user = wp_cache_get($user_id, 'users');
    163 
    164         if ( false !== $user )
    165                 return $user;
    166 
    167         if ( !$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_login = %s", $user_login)) )
    168                 return false;
    169 
    170         _fill_user($user);
    171 
    172         return $user;
     196        return get_user_by('login', $user_login);
    173197}
    174198endif;
    … …  
    184208 */
    185209function get_user_by_email($email) {
    186         global $wpdb;
    187 
    188         $user_id = wp_cache_get($email, 'useremail');
    189 
    190         $user = false;
    191         if ( false !== $user_id )
    192                 $user = wp_cache_get($user_id, 'users');
    193 
    194         if ( false !== $user )
    195                 return $user;
    196 
    197         if ( !$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_email = %s", $email)) )
    198                 return false;
    199 
    200         _fill_user($user);
    201 
    202         return $user;
     210        return get_user_by('email', $email);
    203211}
    204212endif;
Note: See TracChangeset for help on using the changeset viewer.