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
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