WordPressでCrazy Boneを使用しているとCall to undefined function get_userdatabylogin()が起こる場合

 投稿日時
2014/05/07 16:09:58
 最終更新日時
2014/05/07 16:09:58

私の手元でたまに発生していた現象なのですが、『今まで普通にWordPressにアクセスできていたのに急にエラーを吐いてアクセスできなくなる』ということがありました。
その都度、エラーが出ている箇所を外して問題がなくなったら原因追及をしないという、エンジニアにあるまじきその場しのぎをしていたのですが、今日になってからちゃんと調べてみました。

私の環境で出ていたのは次のようなエラーです。

[Xxx May 00 00:00:00 2014] [error] [client 000.000.000.000] PHP Fatal error:
  Call to undefined function get_userdatabylogin()
  in /xxxxxx/wp-content/plugins/crazy-bone/plugin.php on line 222

以下、私の調べた原因と対応です。

原因

WordPress3.3以降非推奨になった関数 get_userdatabylogin() を使用しているから。

私の環境でたまにしか起こらなかったのは、このCrazy Boneというプラグインでこの関数が呼ばれるのが

  • Cookieの有効期限が切れたとき(デフォルトは10日?)
  • Cookieのハッシュが無効と判断されたとき

だったため。

対応

考えられる対応。

  • telnetやFTPでアクセスし、原因となっているプラグインフォルダの名前を変える(または別のフォルダに移動する)。
    このプラグインを再インストールすれば使えるはずだが、またCookieが切れたときに再発するため、この機能を使いたいはこのプラグインの使用を止めて、似た機能を持つもの(Simple Login Logなど)に置き換える。
  • telnetかFTPでアクセスしてこのプラグインの中身をいじる。具体的に言うと、L81とL82で add_action() しているところをコメントアウトする。
  • ブラウザから該当のCookieを削除する(試していません)。

本当は作者の方にcontributeしたいところですが、調べた内容に環境依存がないか自信がないので、ここに書くにとどめておきます。