Actualizar user_login para cambiar el nombre de usuario

2

Estoy intentando actualizar user_login en la tabla wp_users para forzar la actualización del nombre de usuario de un usuario a su dirección de correo electrónico al enviar un formulario de perfil de edición de front-end.

Sé que WordPress prohíbe esto a través de la función wp_update_user , así que estoy tratando de usar SQL con las funciones wpdb.

Esto es lo que tengo y no funciona :(

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

¿Alguien puede ayudar?

Se corrigió, consulte aquí: enlace

    
pregunta mattberridge 09.11.2012 - 12:26

2 respuestas

3

Primero:

El objeto $wpdb tiene los nombres de tablas , con prefijos, predefinidos para usted.

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

Segundo:

$wpdb-prepare() es esencialmente una impresión consciente de WordPress, si la pasa más de un argumento, necesita para tener algunos reemplazos de cadena / dígito %s %d

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

Alternativamente, $wpdb tiene un método de también :

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

enlace

    
respondido por el totels 09.11.2012 - 13:01
2

Lo arreglé! Hay dos métodos:

// 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 actualizado: enlace

    
respondido por el mattberridge 09.11.2012 - 12:40

Lea otras preguntas en las etiquetas