Update user_login to change username

I’m trying to update user_login in the wp_users table, to force update a user’s username to their email address on submission of a front end edit profile form.

I know WordPress forbids this via the wp_update_user function so I am trying to use SQL with wpdb functions.

Here is what I have, and it is not working 🙁

global $wpdb;
$tablename = $wpdb->prefix . "users";
$sql = $wpdb->prepare( "UPDATE ".$tablename." SET user_login=".$user_email." WHERE ID=".$user_id."", $tablename );
$wpdb->query($sql);

Can anyone help?

Fixed it, see here: https://gist.github.com/4045215

2 Answers
2

First:

The $wpdb object has the names of tables, with prefixes, pre-defined for you.

$wpdb->users == 'wp_users'
$wpdb->posts == 'wp_posts'
etc.

Second:

$wpdb-prepare() is essentially a WordPress aware printf, if you pass it more than one argument, you need to have some string/digit replacements %s %d

$sql = "UPDATE {$wpdb->users} SET user_login = %s WHERE ID = %d"
$sql = $wpdb->prepare($sql, $user_email, $user_ID);
$wpdb->query($sql);

Alternatively $wpdb does have an update method as well:

$wpdb->update($wpdb->users,
    array('user_login', $user_email), array('ID', $user_id),
    array('%s'), array('%d'));

http://codex.wordpress.org/Class_Reference/wpdb

Leave a Comment