WordPressでプラグインなどからパスワードを追加・更新してログインできなくなった時は実行タイミングに注意!

WordPressでシステム構築中にパスワードがらみでハマってしまったのでメモしておきます。

WordPressをCMS的に使っているとWordPressデフォルトの「ユーザー」を使わずにユーザー管理するシステム案件というのは少なくありません。

wp_insert_user()やwp_update_user()、wp_create_user()などを使ってユーザー情報を登録・更新することがあると思います。

しかし、きちんとした手順をふみ、データベースにもしっかりハッシュ化されたパスワードが入力されているのになぜかログインできない・・・

wp_hash_password()が問題なのか、wp_set_password()を使うべきか、いや、そもそも以前やった時はこんなことでハマらなかったのに、WordPressのバージョンが上がって仕様が変わったのか・・・。

こんな感じでしばらくハマっていたのですが、実はこれwp_insert_user()やwp_update_user()、wp_create_user()の実行タイミングの問題でした


どうやらWordPressはパスワードを変更した際に単純にuserテーブルの情報を書き換えるだけでなく、他の付帯処理が実行されているようで(?)実行タイミングが早すぎるとこれら付帯処理が実行されないのでログインできないという現象が発生するのではないかと。あくまで現段階では未検証の仮説ですが。

私はsave_postにひっかけてwp_insert_user()やwp_update_user()、wp_create_user()を実行してあげたらうまくいきました。

同じ問題でお悩みの方の参考になれば嬉しいです。