wordpressでユーザー名を変更する

wordpressを使っているとユーザーの名前を変更したい時があります。そこで一番簡単なのは、ニックネームを変えてしまう方法です。単純に登録したユーザーの名前が気に入らなくなって、ブログ上のあちこちで表示される名称を変えたいというのであれば、これで十分です。

wordpressの管理画面から変更

まず、wordpressの「管理画面」→「ユーザー」→「あなたのプロフィール」という順番でページを移動します。そして、「ニックネーム」の項目で好きな名称を入れ、その下にあるプルダウンメニューの「ブログ上の表示名」で入力したニックネームを選択し、本文最後尾の「プロフィールを更新」ボタンをクリックすることで変更できます。

しかし、この方法ではwordpressへログインする際のユーザー名(ID)を変更することはできません。上の方法はあくまでブログ上の表示名を変えるだけで、各ユーザーのログインIDはそのままです。従って「admin」など、管理者の名称を変えることもできません。

wordpressの管理画面で削除して再登録

wordpressの「管理画面」→「ユーザー」へと移動して、ユーザー一覧のページを開きます。上のほうにある「新規追加」をクリックして、好みのユーザーの名前で新たに登録します。そして削除したいユーザー名の少し下にポインターを持っていくと、「削除」という文字が赤色で表示されます。これをそのままクリックして削除します。単純に入れ替えるだけですね。

また、こちらの方法では管理者も変更できます。具体的には新たな名前をつけた管理者を登録してログインしなおします。そして、もともと管理者権限のあったユーザーの管理者権限を降格させた後、そのユーザーを削除します。

尚、この方法はwordpressのデータベース内でユーザーの登録ID番号を飛び飛びにしてしまいます。番号が飛んだからといって大きな問題はありません。ただ、プログラムで連番処理する場合には注意が必要な時もあるかも知れません。

phpMyAdminから変更

シングルwordpressであれば、以下のSQL文を入力して実行します。入力欄は「構造」タブの隣にある「SQL」タブをクリックすることで開きます。「admin」の部分に現在のユーザーの名称、「Change_Name」に変更したい名前を入れます。wordpress管理者を含め、一般のユーザー名もこれで切り替わります。ただし、データベースを直接触るため、バックアップは必ずとって置いて下さい。

シングルサイトのwordpress

update wp_users set user_login=replace(user_login, "admin", "Change_Name");
update wp_users set user_nicename=replace(user_nicename, "admin", "Change_Name");

マルチサイトのwordpress

wordpressがマルチサイトで特権管理者以外であれば上記のコードで変更できます。特権管理者であれば以下のSQL文を実行します。その際、「's:5:"admin"', 's:11:"Change_Name"'」の部分に注目して下さい。シリアライズ化されています。つまり、Change_Nameは11文字ですので、「s:」の後に続く数字を11にする必要があります。そのため、使用する名前の文字数に合わせて数値を変更します。独特の書式になっていますね。

update wp_sitemeta set meta_value=replace(meta_value, 's:5:"admin"', 's:11:"Change_Name"');
update wp_users set user_login=replace(user_login, "admin", "Change_Name");
update wp_users set user_nicename=replace(user_nicename, "admin", "Change_Name");

記事のユーザーIDを変更

以下のSQL文は、wordpressデータベース内の「wp_posts」テーブルの「post_author」カラムの値を「1」から「2」に変更しています。「post_author」は、記事を編集したユーザのID番号です。これを新しいIDに置き換える場合、利用環境に合わせて変えて下さい。

update wp_posts set post_author=replace(post_author, "1", "2");

シリアライズとは?

シリアライズは配列を配列としてデータベースへ記録する際に行われます。
例えば、

print_r(serialize(['wordpress_1','wordpress_12','wordpress_123']));

のようにシリアライズすると、

a:3:{i:0;s:11:"wordpress_1";i:1;s:12:"wordpress_12";i:2;s:13:"wordpress_123";}


と出力されます。

一方、シリアライズ化された

print_r(unserialize('a:2:{i:0;s:6:"user_a";i:1;s:7:"user_bb";}'));

を逆にアンシリアライズすると、

Array ( [0] => user_a [1] => user_bb )


と出力されます。

a:2やa:3の「a:」の隣の数字は配列に含まれている要素の数になっています「i:」の隣の数字は配列でいうキーの数値です。配列の数に合わせて0から順番に割り当てます。「s:」の隣の数字はその隣の文字列の文字数を表しています。少しややこしいかも知れませんが、wordpressからデータベースへ登録される配列は、こういった形で記録されています。

ユーザー名の確認

wordpressは、インストールされているディレクトリのURL末尾に「?author=1」などのパラメータを付け加えると対応するユーザー名を含んだURLを返してきます。つまりリダイレクトされます。「1」という数字は大抵wordpressの管理者(特権管理者を含む)に使われています。それ以降の数字は登録しているユーザー名に割り当てられているID番号です。「?author=」に続いて数字を加算しながらURLにアクセスすると、そのwordpressにどのようなユーザー名があるのかが分かります。

ユーザー名はwordpressへログインする際に使われるIDのようなものなのです。そのため、IDを固定してあらゆるパスワードを片っ端から送信するブルートフォース攻撃のターゲットになってしまう可能性もあります。また、複数のIDに対して固定パスワードを短時間で片っ端から送信することを繰り返すパスワードスプレー攻撃もあります。

まとめ

wordpressでユーザーの名称を変更することはそれほど難しい作業ではありません。一言でいえばやり方の問題でしょうか。管理者の名前を変更したい場合は、上に述べた権限を入れ替えて削除する方法が最も安全で簡単です。phpMyAdminなど、直接データベースをいじるのであればバックアップをとっておいたほうが無難です。慣れてくると手抜きしがちですが、自動バックアップにしておくと便利です。