wordpress公式ロゴ

不要なユーザーを削除する

状況

当サイトはwordpressで出来ています。
2008年8月1日に開設したときから同じwordpressをバージョンアップしながら今まで使い続けてきています。
途中、サーバの引っ越しだとか、リニューアルとか、今回のドメイン変更などありましたが、開設当初からの血を受け継いだ1つのwordpressです。
開設一発目の投稿はこちらです

最初の頃はよく分かってなくて色々カスタマイズしたものです。
今となっては不要なものもいっぱいあります。
今回のリニューアルではそういったものの除去も1つの目的になっていました。

目標

いろいろカスタマイズとか試行錯誤しているうちに不要なユーザーができていました。
今回はそれらを削除して1つのユーザーだけに統一したいと思います。

実施

作業する前にバックアップを取っていつでも元に戻せるようにしておきましょう。
それと、このページと同じことを行って何か問題が発生しても弊社からは何もできませんので自己責任でお願いします。(有償サポートはお問合せください)

wp_users の準備

phpMyAdminなどを使って「wp_users」テーブルをエクスポートしてきます。
※構造は要らないのでデータだけエクスポートします。

例えば下記のように3つのユーザーが作られていたとします。

INSERT INTO `wp_users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status`, `display_name`, `spam`, `deleted`) VALUES
(1, 'admin', '****', 'admin', 'admin@example.com', '', '日時', '', 0, '名前', 0, 0),
(2, 'aulta', '****', 'aulta', 'aulta@example.com', '', '日時', '', 0, '名前', 0, 0),
(3, 'user1', '****', 'user1', 'user1@example.com', '', '日時', '', 0, '名前', 0, 0);

「admin」と「user1」はもう要らないので消して「aulta」だけにしてすっきりさっぱりさせたいと思います。

次のように、残したいユーザー以外をさっくり削除します。

INSERT INTO `wp_users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status`, `display_name`, `spam`, `deleted`) VALUES
(2, 'aulta', '****', 'aulta', 'aulta@example.com', '', '日時', '', 0, '名前', 0, 0)

このままではユーザーIDが「2」ですので、やっぱ「1」がいいですよね。
なので、IDのところを「1」に変えます。

INSERT INTO `wp_users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status`, `display_name`, `spam`, `deleted`) VALUES
(1, 'aulta', '****', 'aulta', 'aulta@example.com', '', '日時', '', 0, '名前', 0, 0)

ひとまずこれはこのまま置いておいて次の作業です。

wp_usermetaの準備

phpMyAdminなどから「wp_usermeta」テーブルをエクスポートしてきます。
※構造は要らないのでデータだけエクスポートします。

INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES
(1, 1, 'first_name', '名1'),
(2, 1, 'last_name', '姓1'),
(3, 1, 'nickname', '名前1'),
(61, 2, 'first_name', '名2'),
(62, 2, 'last_name', '姓2'),
(63, 2, 'nickname', '名前2'),
(91, 3, 'first_name', '名3'),
(92, 3, 'last_name', '姓3'),
(93, 3, 'nickname', '名前3');

※SQLを全部載せると長くなるので要点だけ記します。

こちらの2つ目のカラムが「ユーザーID」です。
wp_user のほうで、「元のIDが2を残す」だったので、2つ目のカラムが2以外を削除します。

INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES
(61, 2, 'first_name', '名2'),
(62, 2, 'last_name', '姓2'),
(63, 2, 'nickname', '名前2');

※実際は3行分だけじゃなくもっとあります。2つ目のカラムを見て残したいユーザーIDのものは全部残します。

次に、ユーザーIDを「2」じゃなく「1」に変えたいので「1」に書き換えます。

INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES
(61, 1, 'first_name', '名2'),
(62, 1, 'last_name', '姓2'),
(63, 1, 'nickname', '名前2');

※2つ目のカラム(ユーザーID)だけ書き換えます。こちらも3行分だけじゃなく残したいユーザーIDのものを全部です。

このままでも良いのですが、先頭のカラムが61から始まってるのもなんかすっきりしませんね。
1から始まって欲しいところです。
先頭の数字を、上から1, 2, 3 ・・・と連番に書き換えます。

INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES
(1, 1, 'first_name', '名2'),
(2, 1, 'last_name', '姓2'),
(3, 1, 'nickname', '名前2');

※こちらも3行分だけじゃなく全部です。

SQLの実行

まずはバックアップをしておきましょう。
バックアップが出来たら、SQLを実行していきます。

wp_users テーブルを空にします。

TRUNCATE wp_users;

【wp_users の準備】で作成したSQLを実行します。

INSERT INTO `wp_users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status`, `display_name`, `spam`, `deleted`) VALUES
(1, 'aulta', '****', 'aulta', 'aulta@example.com', '', '日時', '', 0, '名前', 0, 0)

wp_usermeta テーブルを空にします。

TRUNCATE wp_usermeta;

【wp_usermeta の準備】で作成したSQLを実行します。
※実際は下記3行だけでなくもっとあります。

INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES
(1, 1, 'first_name', '名2'),
(2, 1, 'last_name', '姓2'),
(3, 1, 'nickname', '名前2');

「記事を投稿したユーザー」をユーザーID「1」が投稿したことにします。

update wp_posts set post_author = 1;

投稿記事にコメントが付いているなら、コメントの投稿ユーザーもユーザーID「1」に変えます。
ただし、ゲストとして投稿しているもの(user_id=0)は除外します。

update wp_comments set user_id = 1 where user_id > 0;

あと、使用しているプラグインによっては、ユーザーIDを使っているものがあると思います。
wordpressが使ってるテーブル構造を確認して、ユーザーIDっぽいものがあれば同じように変えておきます。

動作確認

wordpressにログインしていた場合はログアウトします。

wordpressのログイン画面を開いて、削除したユーザーでログインしてみます。
ログインできなければOKです。

wordpressのログイン画面を開いて、残しておいたユーザーでログインしてみます。
ログインできればOKです。

http://ドメイン/author/ユーザー名
このURLにアクセスしてみます。
すべての投稿が出てくるはずです。

ユーザー名の部分を削除したユーザー名に変更してアクセスします。
404エラー(ページが見つかりません)になればOKです。

ちなみに当サイトの場合は次のURLです。

https://aulta.co.jp/author/aulta

https://aulta.co.jp/author/admin

※adminのほうは aulta に転送させています。

ということで、ユーザーを削除したことで author の下のページにリンク切れが発生している状態になっています。
こちらについてはまた別の記事で書きたいと思います。

ついでに

あと、ご覧のようにユーザー名ってバレバレです。ログインに使用するユーザー名がバレバレなんです。
テーマによっては投稿記事に投稿者のリンクが付いてる場合もありますし、そうでなくても調べようと思ったら調べれそうです。

ログインパスワードは強力なものにしましょう。
「http://ドメイン/author/・・・」 のページが不要なら無効にしてしまっても良いと思います。
「http://ドメイン/author/ユーザー名」 ではなく 「http://ドメイン/author/別の何か」に変えるのもアリです。
でも、ログインページ自体を狙われないような強固なものにカスタマイズしたほうが良いかもしれません。

このあたりはまた別の記事で書きたいと思います。