J'essaie de mettre à jour user_login
dans la table wp_users
afin de forcer la mise à jour du nom d'utilisateur d'un utilisateur vers son adresse électronique lors de la soumission d'un formulaire de profil d'édition frontal.
Je sais que WordPress interdit cela via la fonction wp_update_user
et j'essaie donc d'utiliser SQL avec les fonctions wpdb.
Voici ce que j'ai, et ça ne marche pas :(
global $wpdb;
$tablename = $wpdb->prefix . "users";
$sql = $wpdb->prepare( "UPDATE ".$tablename." SET user_login=".$user_email." WHERE ID=".$user_id."", $tablename );
$wpdb->query($sql);
Quelqu'un peut-il aider?
Corrigé, voir ici: https://Gist.github.com/4045215
Premier:
L'objet $wpdb
a les noms des tables , avec les préfixes, prédéfinis pour vous.
$wpdb->users == 'wp_users'
$wpdb->posts == 'wp_posts'
etc.
Seconde:
$wpdb-prepare()
est essentiellement un printf conscient de WordPress. Si vous transmettez plusieurs arguments, vous devez disposer de plusieurs remplacements de chaîne/chiffre %s
%d
$sql = "UPDATE {$wpdb->users} SET user_login = %s WHERE ID = %d"
$sql = $wpdb->prepare($sql, $user_email, $user_ID);
$wpdb->query($sql);
Sinon, $wpdb
a également une méthode update :
$wpdb->update($wpdb->users,
array('user_login', $user_email), array('ID', $user_id),
array('%s'), array('%d'));
Fixe le! Il y a deux méthodes:
// Force update our username (user_login)
global $wpdb;
$tablename = $wpdb->prefix . "users";
// method 1
//$sql = $wpdb->prepare("UPDATE {$tablename} SET user_login=%s WHERE ID=%d", $user_email, $user_id);
//$wpdb->query($sql);
// method 2
$wpdb->update( $tablename, array( 'user_login' => $user_email ), array( 'ID' => $user_id ) );
Gist mis à jour: https://Gist.github.com/4045215