WordPressのログインパスワードを忘れた時に、MySQLからパスワードを変更するのは結構簡単です。
しかし、管理者権限のユーザーを新規に作ろうとすると、phpMyAdminだと設定項目が多くてチョット嫌になるレベルです。
そこで、SQLコマンドで一気にやってしまうというのがこの記事の内容です。
新規ユーザーの追加コマンド
VLUES()の中の‘your username’と‘your password’は最低でも書き換えないといけません。他は後から変更しても良いでしょう。
環境によって、接頭辞が異なる場合がありますので、実際のDBのテーブルの名前は事前に確認した方が良いです。
INSERT INTO `wp_users` (`user_login`, `user_pass`, `user_nicename`, `user_email`, `user_status`) VALUES ('your username', MD5('your password'), 'your firstname & your lastname', 'your email', '0');
SQLを実行すると、user_registeredが無いというエラーになる場合があります。
その場合は、user_registeredの項目を追加して、テキトウな日時を設定する以下のバージョンで対応します。
INSERT INTO `wp_users` (`user_login`, `user_pass`, `user_nicename`, `user_email`, `user_status`, 'user_registered') VALUES ('your username', MD5('your password'), 'your firstname & your lastname', 'your email', '0','2022-09-01 00:00:00');
新規ユーザーに管理者権限を与えるコマンド
最後に追加されたユーザーの権限を管理者権限に変更するコマンドになっています。
このコマンドを先に実行してしまうと、別のユーザーの権限が変更されてしまいますので注意しましょう。
環境によって、接頭辞が異なる場合がありますので、実際のDBのテーブルの名前は事前に確認した方が良いです。
INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, (Select max(id) FROM wp_users), 'wp_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');
INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, (Select max(id) FROM wp_users), 'wp_user_level', '10');
追加したユーザーでブロックエディタでブロックが表示されない
追加したユーザーでページや投稿をブロックエディタで編集すると、全く動きません。
ブロックを読み込みエラーになるようです。
これは致命的です。
原因はよくわかりませんが、Wordpressのダッシュボードから別のユーザーを追加すると普通にブロックエディタが動くので、MySQL経由で追加する時に、何かが不足しているのだと思います。
今回のユーザー追加はあくまで、ダッシュボードにアクセスできるように一時的に追加するイメージなので、ダッシュボードにアクセスできれば、目的達成ですので、ダッシュボードからユーザーを作り直せば解決します。
番外編:FTPアカウントだけでユーザーパスワードを変更する
FTPアカウントしかわからない状態で、DB内部のパスワードを書き換える方法については以下を参照してください。
まとめ
管理者ユーザーを追加する方法は、検索すると出てくるのですが、そのままやってもうまくいかないことが多いです。
その理由は、DBのテーブル名がサイトごとに異なるからです。たまたま検索したサイトと同じ場合は上手くいくのですが、そうじゃない場合はユーザー追加できても管理者権限にならないので、ダッシュボードが表示されなくなります。
そこだけ注意すれば、どの方法でもうまく追加できる、逆に言えばどの方法でもそこがネックになるのですが、MySQLのクエリを使った方がイライラしませんという話でした。