フロントエンドの編集プロファイルフォームを送信したときに、ユーザーのユーザー名を自分の電子メールアドレスに更新するように、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
最初:
$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'));
それを修正しました! 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