web-dev-qa-db-ja.com

ユーザー名を変更するためにuser_loginを更新する

フロントエンドの編集プロファイルフォームを送信したときに、ユーザーのユーザー名を自分の電子メールアドレスに更新するように、user_loginテーブルのwp_usersを更新しようとしています。

WordPressがwp_update_user関数でこれを禁止しているので、私はwpdb関数でSQLを使用しようとしています。

これは私が持っているものです、そしてそれは働いていません:(

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

誰も手伝ってくれる?

修正しました。こちらをご覧ください:https://Gist.github.com/4045215

2
mattberridge

最初:

$wpdbオブジェクトには テーブルの名前 が付いています。プレフィックスはあらかじめ定義されています。

$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

3
totels

それを修正しました! 2つの方法があります。

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

要旨を更新しました:https://Gist.github.com/4045215

2
mattberridge