更新USER_LOGIN以更改用户名

时间:2012-11-09 作者:mattberridge

我正在尝试更新user_loginwp_users 表,以强制在提交前端编辑配置文件表单时将用户的用户名更新到其电子邮件地址。

我知道WordPress禁止通过wp_update_user 所以我尝试将SQL与wpdb函数一起使用。

以下是我所拥有的,但它不起作用:(

global $wpdb;
$tablename = $wpdb->prefix . "users";
$sql = $wpdb->prepare( "UPDATE ".$tablename." SET user_login=".$user_email." WHERE ID=".$user_id."", $tablename );
$wpdb->query($sql);
有人能帮忙吗?

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

2 个回复
SO网友:totels

首先:

这个$wpdb 对象具有names of tables, 带有前缀,为您预定义。

$wpdb->users == \'wp_users\'
$wpdb->posts == \'wp_posts\'
etc.
第二个:

$wpdb-prepare() 本质上是一个支持WordPress的printf,如果传递多个参数,则需要替换一些字符串/数字%s %d

$sql = "UPDATE {$wpdb->users} SET user_login = %s WHERE ID = %d"
$sql = $wpdb->prepare($sql, $user_email, $user_ID);
$wpdb->query($sql);
或者$wpdb 是否有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

SO网友:mattberridge

修好了!有两种方法:

// 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 ) );
Updated Gist: https://gist.github.com/4045215

结束

相关推荐

Users Role and Access

我是一个新手,所以请耐心等待。我正试图创建一个网站与程序员使用wordpress,但不使用它的博客或帖子<我自己不是程序员。我希望人们注册该网站,默认情况下,他们的角色将是修改后的订阅者。这意味着他们将无法访问管理员,也无法在网站上进行任何编辑。他们所能做的就是查看页面。此外,我想限制他们只查看一个或多个特定页面。管理员可以稍后更改其状态,并将其角色设置为常规订阅者。我真正想做的是创建一个有完全限制的网站用户将注册,但在管理员审核其注册并授予其访问权限之前,用户仍无法获得访问权限。这可能吗?