summaryrefslogtreecommitdiffstats
path: root/wp-includes/pluggable.php
diff options
context:
space:
mode:
Diffstat (limited to 'wp-includes/pluggable.php')
-rw-r--r--wp-includes/pluggable.php36
1 files changed, 28 insertions, 8 deletions
diff --git a/wp-includes/pluggable.php b/wp-includes/pluggable.php
index 72a4be7..b25ede2 100644
--- a/wp-includes/pluggable.php
+++ b/wp-includes/pluggable.php
@@ -123,20 +123,40 @@ function get_userdatabylogin($user_login) {
$userdata = wp_cache_get($user_login, 'userlogins');
- if ( $userdata )
+ if( $userdata && is_site_admin( $user_login ) == true ) {
+ $userdata->user_level = 10;
+ $cap_key = $wpdb->prefix . 'capabilities';
+ $userdata->{$cap_key} = array( 'administrator' => '1' );
+ return $userdata;
+ } elseif( $userdata )
return $userdata;
- $user_login = $wpdb->escape($user_login);
-
- if ( !$user_ID = $wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_login = '$user_login'") )
+ if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_login = '$user_login'") )
return false;
- $user = get_userdata($user_ID);
+ $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user->ID'");
+
+ if ($metavalues) {
+ foreach ( $metavalues as $meta ) {
+ @ $value = unserialize($meta->meta_value);
+ if ($value === FALSE)
+ $value = $meta->meta_value;
+ $user->{$meta->meta_key} = $value;
+
+ // We need to set user_level from meta, not row
+ if ( $wpdb->prefix . 'user_level' == $meta->meta_key )
+ $user->user_level = $meta->meta_value;
+ }
+ }
if( is_site_admin( $user_login ) == true ) {
- $user->user_level = 10;
- $cap_key = $wpdb->prefix . 'capabilities';
- $user->{$cap_key} = array( 'administrator' => '1' );
+ $user->user_level = 10;
+ $cap_key = $wpdb->prefix . 'capabilities';
+ $user->{$cap_key} = array( 'administrator' => '1' );
}
+
+ wp_cache_add($user->ID, $user, 'users');
+ wp_cache_add($user->user_login, $user, 'userlogins');
+
return $user;
}
endif;