tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

Wordpressのログインパスワードを忘れてリセットメールも飛ばない時に何とかする方法

MySQLを直接いじれば何とかなるだろうと思い、やってみたら実際に何とかなった記録。
Wordpressのバージョンは3.6.1。

DB接続情報を調べる

ここら辺の情報も忘れちゃったうっかりさんは、wp-config.phpに直書きされているのでそれを見よう!

$ view wp-config.php
define('DB_NAME', 'wordpress');
define('DB_USER', 'wp_user');
define('DB_PASSWORD', 'wp_password');
$table_prefix = 'wp_';

MySQLのシェルを起動させる

$ mysql <DB_NAMEの値> -u <DB_USERの値> -p
Enter password: <DB_PASSWORDの値>

今のWPログインユーザーを調べる

ログイン情報のテーブル名は$table_prefix + usersなので、上記の場合のテーブル名はwp_usersになります。

mysql> select user_login, user_pass from wp_users;
+------------+----------------------------------+
| user_login | user_pass                        |
+------------+----------------------------------+
| site_admin | 5f4dcc3b5aa765d61d8327deb882cf99 |
+------------+----------------------------------+
1 row in set (0.00 sec)

以降の例ではsite_adminさんのパスワードを変えてみます。

パスワードを変更する

mysql> update wp_users set user_pass = md5('<新しいパスワード>') where user_login = '<変更するログインユーザー>';

パスワードを変えるにはmd5関数に新しいパスワードを渡し、whereのuser_loginに変更したいユーザーを入れるだけです。

site_adminさんのパスワードを'new password'にする場合、

mysql> update wp_users set user_pass = md5('new password') where user_login = 'site_admin';

これでOKです。

実行後、user_passの欄が変更されていれば成功です。

mysql> select user_login, user_pass from wp_users;
+------------+----------------------------------+
| user_login | user_pass                        |
+------------+----------------------------------+
| site_admin | ac1ef17c2db40995e9fdd40b04a5a649 |
+------------+----------------------------------+
1 row in set (0.00 sec)

あとは、いつも通りにログインできるはずです。

おまけ(1)

Simple Login Lockdownプラグインを使っている場合、既に規定数以上ログインに失敗しているであろうので、一時的に無効にしておきましょう。
プラグイン内のlogin.phpファイルのinit関数の中身をコメントアウトすれば無効になります。

$ vi wp-content/plugins/simple-login-lockdown/inc/login.php
public static function init()
{
    //add_action('plugins_loaded', array(self::instance(), '_setup'));
}

※無事にログインできたら、忘れずに戻しておきましょう。

おまけ(2)

メールが飛ばないのはSMTPサーバーを動かしたく無かったからなのですが、WP Mail SMTPプラグインを入れて直接GMailなどの外部SMTPを使えばよさそうです。