web-dev-qa-db-fra.com

Mettre à jour user_login pour changer le nom d'utilisateur

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

2
mattberridge

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'));

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

3
totels

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

2
mattberridge